本帖最后由 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);//创建炮塔
复制代码
|