3D塔防游戏实现 2.2 管理建炮塔规则(Feekood语言)

(Feekood语言介绍与习) (学习) (首页) (开发页面)

—————————— 在上一章创建炮塔中,把炮塔分为两个阶段: 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*60TargetX=60*(owner.opposite.X);//根据传过来的比例算3D空间的XTargetZ=60*(owner.opposite.Z);//根据传过来的比例算3D空间的ZTargetY=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,以及内部属性Createtabcase($(“TurretPanel”).CreateTab==true&&owner.Createtab,{ //向炮塔面板传递创建完成信息$(“TurretPanel”).CreateTab=false;//向炮塔面板传递创建空间点信息$(“TurretPanel”).targetXYZ={x:owner.hitx,y:owner.hity,z:owner.hitz};//内部属性置为falseowner.Createtab=false;//单独的炮塔隐藏CreateTurretTab.show=false;});};Createtab:true;//炮塔是否能创建标记IsMouseMove:=> { //鼠标移动事件//判断炮塔面板中的CreateTab属性是否为truecase($(“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);//创建地图,,::为继承婚姻犹如一艘雕刻的船,看你怎样去欣赏它,又怎样驾驭它。

3D塔防游戏实现 2.2 管理建炮塔规则(Feekood语言)

相关文章:

你感兴趣的文章:

标签云: