(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;//等级
};
};