(Feekood语言介绍与习)
http://www.wooyoogame.com/doc/index(学习)
http://www.wooyoogame.com(首页)
http://www.feekood.com/ (开发页面)
——————————
该阶段用到了http://www.wooyoogame.com上的资源。
http://www.wooyoogame.com/resource/18 (炮塔)
http://www.wooyoogame.com/resource/5394 (炮弹)
http://www.wooyoogame.com/resource/2 (炮塔纹理)
在上一章创建炮塔中,把炮塔分为两个阶段:
1.创建炮塔精灵按钮、3D模型。
2.管理建炮塔规则(不重叠、高地建设、在3D地图上创建炮塔)。
接下来加介绍第二阶段:
在上一文件夹层级的基础上,我们新增2脚本,“TurretPanel.ais”管理炮塔与“Main.ais”程序主入口。
如图:
首先把“TurretMesh.ais”中最后一句注释掉
下面是“TurretPanel.ais”的代码:
Include("TurretSpriteBtn.ais"); //引入精灵按键
Include("TurretMesh.ais");//引入炮塔模型基础数据
//创建一个单独的炮塔模型,用以创建时移动与对比用
Create(CreateTurretTab={
type:"mesh";
model:"TurretA1model";
texture:"TurretImg";
SimplerState:"wrap";
Shader:"phong";
Scale:{0.6,0.6,0.6};
show:false;
Rotation:180;
ScopeRadius: 2;
ShowScope: true;
});
//炮塔管理面板
TurretPanel={
CreateTab:false; //是否创建标志
CreateTab:->{ //属性改变时触发事件
case(!owner.CreateTab,
{ //创建完成后恢复炮塔精灵按钮的图片
$("TurretASpriteBtn").texture="TurretAImg";
});
};
target:"";//创建炮塔类型
TurretAssemble:{};//已经创建炮塔的名字
targetXYZ:{}; //创建炮塔的空间坐标
targetXYZ:-> //坐标改变时触发
{
case(size(owner.targetXYZ)>0,
{ //创建炮塔
TurretName=create({
x:owner.targetXYZ.x,
y:owner.targetXYZ.y,
z:owner.targetXYZ.z,
Scale:{0.6,0.6,0.6};
model:owner.target+"1model";
}::TurretBaseMesh);
//把创建的炮塔放入TurretAssemble变量中
owner.TurretAssemble<<TurretName;
});
//清空坐标
owner.targetXYZ={};
};
};
因为所以到3D地图上点击、移动所以“3D地图/MainMap.ais”脚本进行补充代码如下:(增加了IsClick与IsMouseMove事件)
include("MapBase.ais");//引入地图基础文件
include("../navcontrol/UiPanel.ais");//应用视角文件
include("2DMap/2Dmap.ais");//引入2D地图
create({
//主地图名称 可以通过Getdata("MainMap")获取 2D地图中用到
name:"MainMap";
opposite:{};
opposite:->{ //通过2D地图传送比例过来
//3D地图的长宽都为32格,然后每格大小为4 所以总的长宽都为120左右
//所以3D地图的四个区域的大小都是60*60
TargetX=60*(owner.opposite.X);//根据传过来的比例算3D空间的X
TargetZ=60*(owner.opposite.Z);//根据传过来的比例算3D空间的Z
TargetY=MainCamera.Position->1;//获取当前视角的3D空间的Y
//控制500毫秒内移动到目标3D视角中眼镜的空间坐标
MainCamera.Position<:{{TargetX,TargetY,TargetZ+40},500};
//控制500毫秒内移动到目标3D视角中目标物的空间坐标
MainCamera.Target<:{{TargetX,0,TargetZ},500};
};
IsHitTest:true; //开始鼠标点击
IsClick:=> //点击3D地图地面
{ //判断炮塔面板中的CreateTab属性是否为true,以及内部属性Createtab
case($("TurretPanel").CreateTab==true&&owner.Createtab,
{ //向炮塔面板传递创建完成信息
$("TurretPanel").CreateTab=false;
//向炮塔面板传递创建空间点信息
$("TurretPanel").targetXYZ={x:owner.hitx,y:owner.hity,z:owner.hitz};
//内部属性置为false
owner.Createtab=false;
//单独的炮塔隐藏
CreateTurretTab.show=false;
});
};
Createtab:true;//炮塔是否能创建标记
IsMouseMove:=> { //鼠标移动事件
//判断炮塔面板中的CreateTab属性是否为true
case($("TurretPanel").CreateTab==true,
{
owner.Createtab=true; //初始化Createtab为true
//单独的对比炮塔属性赋值
CreateTurretTab.texture="TurretImg"; //炮塔纹理
CreateTurretTab.show=true; //炮塔显示
CreateTurretTab.x=owner.hitx; //炮塔X坐标改变为鼠标点
CreateTurretTab.y=owner.hity; //炮塔Y坐标改变为鼠标点
CreateTurretTab.z=owner.hitz; //炮塔Z坐标改变为鼠标点
//炮塔在高地(5)以下不能建造
case(CreateTurretTab.y<4.9,
{
CreateTurretTab.texture="clear";//去掉炮塔纹理
owner.Createtab=false;//设置内部属性Createtab为不能创建
});
//遍历查看创建的炮塔是否与已经创建的重叠
foreach(TurretPanel.TurretAssemble,
{ //hit为检测是否碰撞函数(系统内置)
case(hit(CreateTurretTab.name,value),
{
CreateTurretTab.texture="clear";//去掉炮塔纹理
owner.Createtab=false;//设置内部属性Createtab为不能创建
});
});
});
};
}::MapA);//创建地图,::为继承
新增一个主脚本来控制整个游戏入口“Main.ais”。
代码如下:
Include("3D地图/MainMap.ais");//引入3D地图模块
Include("Turret/TurretPanel.ais");//引入炮塔模块
该阶段截图:
该阶段源码链接: http://pan.baidu.com/s/1qWDhUZq 密码: nnsl