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

来源:互联网 发布:淘宝格天科技 编辑:程序博客网 时间:2024/04/30 16:55

(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);//创建炮塔//  print(TurretMesh);
0 0