程序员人生 网站导航

3D塔防游戏实现 4.1 怪物3D空间自动移动(Feekood语言)

栏目:php教程时间:2015-03-31 08:15:46

(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模型怪物,能自动的从诞生点 匀速的运动到目标集合点(支持多个目标点,逐1移动);

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

//引入怪物模型 Foe1=IncludeAisx(":/Wooyoo/window7/SCORPION.aisx"); //模型纹理Mipmap化 CreateMipmap(Foe1.texture); //移动数据 MoveData_North={ {x:0;z:⑷6}, {x:-46;z:⑷6}, {x:-46;z:⑵5}, {x:0;z:⑵5}, {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;//下1个点 //判断下1个点是不是存在, case($("MoveData_"+owner.FoePosition)->(owner.MI).x!=null, { //存在,下1个点赋值给目标点 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"; }; }; }); }; //怪物方向 (设计东南西北方向,所以路径也不1样) FoePosition:""; IsLoaded:=> { //创建成功后履行1次 case(owner.FoePosition!="",{ owner.MI=0; //初始下1点 0号点 //初始化目标点 owner.MoveTargetX=$("MoveData_"+owner.FoePosition)->0.x; owner.MoveTargetZ=$("MoveData_"+owner.FoePosition)->0.z; //走起 owner.state="Move"; }); }; }; //目前只有North数据。下1章 会完全。继承怪物移动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

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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐