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

(Feekood语言介绍与习) http://www.wooyoogame.com/doc/index(学习) http://www.wooyoogame.

(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";   //类型  meshmodel:"TurretA1model"; //模型为炮塔Atexture:"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);