(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);