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

来源:互联网 发布:微信好友定位器软件 编辑:程序博客网 时间:2024/04/30 21:30

(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;  //初始化Createtabtrue            //单独的对比炮塔属性赋值            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

0 0