3D塔防游戏实现 5.2 3D怪物死亡(Feekood语言)

(Feekood语言介绍与习)
http://www.wooyoogame.com/doc/index(学习)
http://www.wooyoogame.com(首页)
http://www.feekood.com/ (开发页面)

——————————
上一篇介绍3D炮塔攻击了。
这一篇介绍3D炮塔攻击后怪物血量减少/死亡。
效果图:
这里写图片描述
源码链接: http://pan.baidu.com/s/1kT7mCAV 密码: 1oyv

这里写图片描述
修改原“TurretMesh.ais”脚本

//引入怪物模型
Foe1=IncludeAisx(":/Wooyoo/window7/SCORPION.aisx");
Foe2=IncludeAisx(":/Wooyoo/dosdos/BEAR.aisx");
Foe3=IncludeAisx(":/Wooyoo/window7/CRYPTFIEND.aisx");
//模型纹理Mipmap化
CreateMipmap(Foe1.texture);
CreateMipmap(Foe2.texture);
CreateMipmap(Foe3.texture);
// 引入移动点数据
Include("MoveData.ais");

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";
        }); 
     };
     IsHitT:false;//是否进入生命塔标记
     IsHitTarget:false;//是否碰到生命塔
     targetName:"";//生命塔名称
     IsUpdated:=>  //每一吃刷新 都判断是否碰到生命塔
     {   //判断怪物是否存在,以及生命塔是否存在、碰撞。 
         case(!(owner.IsHitT)&&owner.targetName!=""&&(!owner.clearOneself),
         {   //碰撞生命塔后 Hit  返回  true-false
             owner.IsHitTarget=Hit(owner.targetName,owner.name);
         });
     };
     //碰撞到生命塔
     IsHitTarget:->
     {    
          owner.state="";//怪物状态清空
          owner.Action="STAND";//怪物STAND
          //把怪物从怪物集中移除
          $("FoePanel").FoeAssemble>>>owner.name;
          //怪物1S内向上移动
          owner.y<:{owner.y+9,1000}<::{
              owner.state="success"; //怪物成功到达
              owner.clearOneself=true;//清除自己
          };
          owner.isHitT=true;//标记以及到达

     };

     Die:false; //死亡属性
     Die:->{  //死亡触发   //未成功到达生命塔
      case(owner.Die==true&&owner.state!="success",
      { //移除怪物
        $("FoePanel").FoeAssemble>>>owner.name;
        owner.XXX=owner.x;
        owner.ZZZ=owner.z;
        //怪物跳一下动作
        owner.x<:"clear"<:{owner.XXX,1}; 
        owner.z<:"clear"<:{owner.ZZZ,1};
        //动作不循环
        owner.IsLoop=false;  
        owner.Rotation=Rand(0,360);
        owner.ProbRandxy=ProbRand(50,0,50,1);
        case(owner.ProbRandxy==0,
        {
           owner.z<:{owner.z,owner.z-2,500};
        },owner.ProbRandxy==1,
        {
           owner.x<:{owner.x,owner.x-2,500};
        });
        owner.y<:{0,1,100};
        owner.y<:{1,0,350};
        owner.Action="MOUNTSWIMSPRINT";
        //慢慢消失
        owner.interim1=0;
        owner.interim1<:{0,1,2000}<::{owner.y<:{0,-0.5,3000}};
        owner.interim2=0;
        owner.interim2<:{0,1,5000}<::{owner.clearOneself=true;};
     });
   };  
   //随时检查血量
   BloodDieTab:true;
   (owner.Data.Blood<=0&&owner.BloodDieTab)==>{
       //血量为0后停止检查
        owner.BloodDieTab=false;
        //触发怪物死亡
        owner.Die=true;
   };
     //消除自己
     clearOneself:false;
     clearOneself:->{
       Clear(owner.name); 
     };
     //等级改变后 改变怪物属性
     Grade:0;
     Grade:->{
       owner.Data.Blood=(((owner.Grade-1)*50)+50);//血量
       owner.Data.Exps=(((owner.Grade-1)*5)+10);//加钱
       owner.Data.Grade=owner.Grade;//等级
    };
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值