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

(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
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值