3D塔防游戏实现 4.1 怪物3D空间自动移动(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/5399 (3D蝎子)
这里写图片描述

❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤
该阶段的功能:3D模型怪物,能自动的从出生点 匀速的运动到目标集合点(支持多个目标点,逐一移动);

该阶段就一个脚本文件“FoeMoveBase.ais”:
其源码如下:

//引入怪物模型
Foe1=IncludeAisx(":/Wooyoo/window7/SCORPION.aisx");
//模型纹理Mipmap化
CreateMipmap(Foe1.texture);
//移动数据
MoveData_North={
    {x:0;z:-46},
    {x:-46;z:-46},
    {x:-46;z:-25},
    {x:0;z:-25},
    {x:0;z:0}};

FoeMoveBase={
     //怪物数据
     Data:{
          Blood:50;
          Exps:10;
          Grade:1;
          speed:3;
     };
     Action:"STAND";//怪物动作
     x:0;y:0.1;z:0;
     show:false;
     IsHitTest:true;//启动鼠标拾取
     IsHitPass:false; //是否击穿
     state:"";//怪物状态
     MI:0;//记录创建怪物移动点
     Rotation:0;//旋转度
     owner.MoveTargetX:100000; //目标位置X
     owner.MoveTargetZ:100000; //目标位置Z
     MoveTime:0;//记录移动时间
     leng2:0; //记录距离的2次方
     //A==> 为 当A为true时  会每一次刷新都执行  
     //怪物移动状态,并且被创建成功
     (owner.state=="Move"&& owner.name!=null)==>
     {  owner.state=""; //状态清空 
        case(owner.MoveTargetX!=100000&&owner.MoveTargetZ!=100000,
        {   owner.Action="RUN";  //设置怪物跑起来
            //计算当前位置与目标位置 的角度,并让怪物旋转方向
            owner.Rotation=Angle2(owner.MoveTargetZ-owner.z,owner.MoveTargetX-owner.x);
            //计算当前位置与目标位置的距离的平方
            owner.leng2=pow(owner.MoveTargetZ-owner.z,2)+pow(owner.MoveTargetX-owner.x,2);
            owner.MoveTime=0;//初始化移动时间
            //根据上述距离 与 自身 速度 计算移动时间
            owner.MoveTime=Sqrt(owner.leng2)/owner.Data.speed*500;
            //怪物X/Z 在计算时间内向目标移动
            owner.x<:"clear"<:{owner.MoveTargetX,owner.MoveTime};
            owner.z<:"clear"<:{owner.MoveTargetZ,owner.MoveTime}<::{
                //<::{};为 在计算时间后才执行
                owner.MI+=1;//下一个点
                //判断下一个点是否存在,
                case($("MoveData_"+owner.FoePosition)->(owner.MI).x!=null,
                {  //存在,下一个点赋值给目标点
                   owner.MoveTargetX=$("MoveData_"+owner.FoePosition)->(owner.MI).x;
                   owner.MoveTargetZ=$("MoveData_"+owner.FoePosition)->(owner.MI).z;
                   //并且执行移动
                   owner.state="Move";
                },!($("MoveData_"+owner.FoePosition)->(owner.MI).x!=null)),
                {  //没有点后 怪物STAND
                   owner.Action="STAND";  
                };    
            };
        });     
     };
     //怪物方向 (设计东南西北方向,所以路径也不一样)
     FoePosition:"";
     IsLoaded:=> {     //创建成功后执行一次
        case(owner.FoePosition!="",{  
            owner.MI=0;   //初始下一点 0号点
            //初始化目标点
            owner.MoveTargetX=$("MoveData_"+owner.FoePosition)->0.x;
            owner.MoveTargetZ=$("MoveData_"+owner.FoePosition)->0.z;
            //走起
            owner.state="Move";
        }); 
     };
};
//目前只有North数据。下一章  会完整。继承怪物移动base,以及Foe1蝎子
//更换怪物,只需要继承不同的怪物
create({FoePosition:"North";}::FoeMoveBase::Foe1);

//为有对比,创建3D线段做参考
lineData=
{   
    type:"line3d";
    Items:{{0;0.1;0;},
           {0,0.1,-46},
           {-46,0.1,-46},
           {-46,0.1,-25},
           {0,0.1,-25},
           {0,0.1,0}};
    Color:{1,1,0,1};
};
Create(lineData);

效果图:
这里写图片描述
因为是动态移动的,截图没效果,可以看下面链接:
http://www.feekood.com/?path=:/zhanghao/%E5%BE%AE%E5%8D%9A/%E9%98%B6%E6%AE%B5%E6%80%A7%E8%84%9A%E6%9C%AC/FoeMoveBase.ais

需要安装一个插件:
运行的时候需要装一个插件:(研究了一下,其实就安装了一个“Microsoft Silverlight”以及打开“3D图像”的权限)
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值