网页私服论坛

 找回密码
 立即注册
搜索
查看: 57871|回复: 0

3D塔防游戏实现 2.1 创建炮塔(Feekood语言)|GameRes游资网

[复制链接]

2

主题

9

帖子

32

积分

新手上路

Rank: 1

积分
32
QQ
发表于 2015-3-2 19:35:00 | 显示全部楼层 |阅读模式
本帖最后由 xxx19900915 于 2015-3-1 19:30 编辑

(Feekood语言介绍与习)
http://www.wooyoogame.com/doc/index(学习)
http://www.wooyoogame.com(首页)
http://www.feekood.com/ (开发页面)

——————————
上一阶段实现的3D地图、2D地图、3D视角控制器。
下来我们一起来创建炮塔,分为两个阶段:
1.创建炮塔精灵按钮、3D模型。
2.管理建炮塔规则(不重叠、高地建设、在3D地图上创建炮塔)。

今天介绍创建炮塔精灵按钮、3D模型:
源码链接: http://pan.baidu.com/s/1dDlJXfj 密码: h2an

在上一阶段的文件夹的基础上新建文件夹“Turret”
1.创建炮塔精灵按钮:
….
脚本:“TurretSpriteBtn.ais”如下:

    LoadImage("TurretAImg","Img/TurretA.png"); // 读取图片资源
    LoadImage("TurretA_hoverImg","Img/TurretA_hover.png"); // 读取图片资源
    TurretASpriteBtn=
    {
        type:"sprite";       // 精灵类型
        texture:"TurretAImg";   // 纹理图片资源名
        blend:"alpha";       // 设置为透明
        x:120;                 // 显示坐标
        y:35;                 // 显示坐标
        width:60;             // 显示宽度
        height:60;            // 显示高度
        CenterX:50%;           // 中心点坐标x(50%表示图中心)
        CenterY:50%;           // 中心点坐标y(50%表示图中心)
        IsHitTest:true;         //是否被点击
        IsMouseDown:=> {        //精灵被按下
            owner.texture="TurretA_hoverImg";   //改变纹理为选择后的图
        };
    };
    Create(TurretASpriteBtn);  //创建按钮精灵
复制代码
2.创建3D炮塔:
炮弹平移两大1时————————————-炮弹偏移量正常
……
脚本:“TurretMesh.ais”如下:

    LoadImage("TurretImg",":/Wooyoo/tower/turret01.jpg");  //炮塔纹理
    //炮塔模型
    LoadModel("TurretA1model",":/Wooyoo/tower/flame_thrower_01.obj","obj");
    //炮弹模型
    BulletA=IncludeAisx(":/Wooyoo/window7/ROCKETMOUNT3.aisx");
    BulletA.action="WALK";//炮弹动画
    BulletA.Scale={0.2,0.2,0.2};//缩放炮弹模型
    //炮塔模型数据
    TurretBaseMesh=   
    {
        type:"mesh";   //类型  mesh
        model:"TurretA1model"; //模型为炮塔A
        texture:"TurretImg";   //模型的纹理
        SimplerState:"wrap";   
        Shader:"phong";
        Scale:{0.6,0.6,0.6};   //缩放下模型大小
        leftName:"";           //存储左炮弹名称
        rightName:"";          //存储右炮弹名称
        x:0;
        y:0;
        z:0;
        OldXZ:{};  //保存炮弹的初始XZ坐标
        //isloaded为创建后执行一次的事件,这里为创建左右炮弹
        isloaded:=>{
            PX=1.25;    //右炮弹X平移炮弹的
            PX1=-1.25;  //左炮弹X平移
            PZ=1.3;     //炮弹Z平移
            //根据炮塔模型的旋转角度来计算左右两炮弹的位置
            xx1=PX*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
            zz1=(-1*PX)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);

            xx2=PX1*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
            zz2=(-1*PX1)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);
            //创建左右两炮塔
            owner.leftName=create({x:owner.x+xx1;y:owner.y+1;z:owner.z+zz1;Rotation:owner.Rotation;show:owner.show}::BulletA);
            owner.rightName=create({x:owner.x+xx2;y:owner.y+1;z:owner.z+zz2;Rotation:owner.Rotation;show:owner.show}::BulletA);
            //保存初始化的炮弹位置
            owner.OldXZ={Lx:owner.x+xx1;Lz:owner.z+zz1;Rx:owner.x+xx2;Rz:owner.z+zz2};
        };
        //炮塔旋转度变化时刷新炮弹角度与位置
        BreakRotation:false;
        BreakRotation:=>{
            PX=1.25;   //右炮弹X平移
            PX1=-1.25; //左炮弹X平移
            PZ=1.3;    //炮弹Z平移
            //根据炮塔模型的旋转角度来计算左右两炮弹的位置
            xx1=PX*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
            zz1=(-1*PX)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);

            xx2=PX1*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
            zz2=(-1*PX1)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);
            //更新两炮弹的X.Y.Z及旋转度
            Getdata(owner.leftName).x=owner.x+xx1;
            Getdata(owner.leftName).y=owner.y+1;
            Getdata(owner.leftName).z=owner.z+zz1;
            Getdata(owner.leftName).Rotation=owner.Rotation;
            Getdata(owner.rightName).x=owner.x+xx2;
            Getdata(owner.rightName).y=owner.y+1;
            Getdata(owner.rightName).z=owner.z+zz2;
            Getdata(owner.rightName).Rotation=owner.Rotation;
            //保存初始化的两炮弹位置
            owner.OldXZ={Lx:owner.x+xx1;Lz:owner.z+zz1;Rx:owner.x+xx2;Rz:owner.z+zz2};
        };
        Rotation:0; //旋转度
        ScopeRadius: 2; //模型的范围半径
        ShowScope: true; //显示模型的范围半径
        show:true;     //显示
        show:->        //控制左右炮弹的显示与隐藏
        {
           Getdata(owner.leftName).show=owner.show;
           Getdata(owner.rightName).show=owner.show;   
        };
        //炮塔移动时炮弹也跟着移动
        x:->{
          Getdata(owner.leftName).x=owner.x;
          Getdata(owner.rightName).x=owner.x;   
        };
        z:->{
          Getdata(owner.leftName).z=owner.z;
          Getdata(owner.rightName).z=owner.z;   
        };
    };

    create(TurretBaseMesh);//创建炮塔
复制代码

网页游戏私服论坛 http://www.c14.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|网页私服论坛  

GMT+8, 2019-7-19 17:05 , Processed in 0.328960 second(s), 32 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表