(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蝎子 )
http://www.wooyoogame.com/resource/5075 (3D熊)
http://www.wooyoogame.com/resource/5143 (3D蜘蛛)
—–
❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤
本阶段主要文件截图:

效果截图:

❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤
该阶段源码链接: http://pan.baidu.com/s/1kTpBCGn 密码: wi13
❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤
正文:
补充上一微博脚本“FoeMoveBase.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; //目标位置Xowner.MoveTargetZ:100000; //目标位置ZMoveTime: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)),{  //没有点后 怪物STANDowner.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-falseowner.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;//标记以及到达};//消除自己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;//等级};
};

移动数据脚本“MoveData.ais”:

//东南西北移动点数据
MoveData_East={
    {x:46;z:0},
    {x:46;z:-46},
    {x:25;z:-46},
    {x:25;z:0},
    {x:0;z:0}};MoveData_South={
    {x:0;z:46},
    {x:46;z:46},
    {x:46;z:25},
    {x:0;z:25},
    {x:0;z:0}};MoveData_West={
    {x:-46;z:0},
    {x:-46;z:46},
    {x:-25;z:46},
    {x:-25;z:0},
    {x:0;z:0}};MoveData_North={
    {x:0;z:-46},
    {x:-46;z:-46},
    {x:-46;z:-25},
    {x:0;z:-25},
    {x:0;z:0}};

怪物刷新管理面板“FoePanel.ais”:

include("FoeMoveBase.ais");//引入怪物移动基础
FoePanel={  //怪物面板FoeAssemble:{};//存储创建的怪物名字FoeData:{      //刷新怪物的数据  Foe1 为怪物1  可以更换别的怪物//方向、怪物类型、怪物数量、怪物等级{"East","Foe1",20,1};{"South","Foe2",20,2};{"West","Foe3",20,3};{"North","Foe1",20,4};{"East","Foe2",20,5};{"South","Foe3",20,6};{"West","Foe1",20,7};{"North","Foe2",20,8};{"East","Foe3",20,9};{"South","Foe1",20,10};};FoeCheckpoint:1;//记录怪物波数Direction:""://记录方向FoeType:0;//记录怪物类型FoeNumber:0;//记录怪物数量FoeTime:0;//怪物刷新间隔变量FoeGrade:1;//记录怪物等级NewFoeNumber:0;//本波怪物数量FoeRefurbish:false; //怪物是否刷新FoeRefurbish:=>{    //怪物刷新//怪物波数数据存在case(Size(owner.FoeData->(owner.FoeCheckpoint-1))>0,{   //根据怪物波数数据,初始化本波数据owner.Direction=owner.FoeData->(owner.FoeCheckpoint-1)->0;owner.FoeType=owner.FoeData->(owner.FoeCheckpoint-1)->1;owner.FoeNumber=owner.FoeData->(owner.FoeCheckpoint-1)->2;owner.FoeGrade=owner.FoeData->(owner.FoeCheckpoint-1)->3;//本波怪物数据出书啊owner.NewFoeNumber=0;//面板状态。刷新开启owner.State="Refurbish";});};RefurbishTab:true;//怪物刷新标记量  后续用于设置怪物完状态FoePositionXZ:{z:0;x:0;};State:"";//状态//A==> 为 当A为true时  会每一次刷新都执行  //Refurbish状态  并且 能刷新 RefurbishTab=true(owner.State=="Refurbish"&&owner.RefurbishTab)==>{owner.State=""; //清空刷新状态owner.FoeTime=0; //初始化话刷新间隔时间标记owner.FoeTime<:{0,1,1000}<::{ //一秒后刷新//调用2D地图中的四个方向的怪物条显示$("Map2DFoeShow"+owner.Direction).show=true;owner.FoePositionXZ={z:0;x:0};//初始化刷新点//根据怪物信息在对应的方位刷新怪物case(owner.Direction=="East",{owner.FoePositionXZ={z:1;x:55};},owner.Direction=="South",{owner.FoePositionXZ={z:55;x:1};  },owner.Direction=="West",{owner.FoePositionXZ={z:1;x:-55};},owner.Direction=="North",{owner.FoePositionXZ={z:-55;x:1};});//创建怪物  运用多继承//::owner.FoePositionXZ 刷新坐标//::FoeMoveBase  怪物移动Base//::$(owner.FoeType)); //怪物类型owner.FoeAssemble<<create({Grade:owner.FoeGrade;FoePosition:owner.Direction;targetName:LifeTower.name;}::owner.FoePositionXZ::FoeMoveBase::$(owner.FoeType)); owner.NewFoeNumber+=1;//本波怪物数量+1}<::{//属性玩怪物后执行//判断怪物数量case(owner.NewFoeNumber<owner.FoeNumber,{   //第一个刷新的怪物case(owner.NewFoeNumber==1,{  //向怪物信息框传递怪物信息GameFoeInfoCtl.FoeInfo=Getdata(owner.FoeAssemble->0).Data;});//刷新下一个怪物owner.State="Refurbish";},!(owner.NewFoeNumber<owner.FoeNumber),{   //波数+1owner.FoeCheckpoint+=1;//是否刷新下一波owner.ISRefurbishNext=true;}); };};// //刷新下一波时间变量RefurbishTime:0;RefurbishTabS:false;//下一波刷新初始化变量RefurbishTabS:=>{  //owner.RefurbishTime=0; //初始化时间变量GameFoeInfoCtl.FoeInfo={a:1};//清空怪物信息owner.RefurbishTime<:{0,1,20000}<::{owner.FoeRefurbish=true;   //20秒后刷新 初始化本波怪物信息};};//刷新下一波变量ISRefurbishNext:false;owner.ISRefurbishNext==>{//刷新下一波owner.ISRefurbishNext=false;//当前怪物级为0 并且  能刷新 RefurbishTab = truecase(size(owner.FoeAssemble)==0&&owner.RefurbishTab,{   //启动下一波刷新时间间隔owner.RefurbishTabS=true;},size(owner.FoeAssemble)!=0,{   //本波还有怪物,所以继续判断是否刷新下一波owner.ISRefurbishNext=true;});    };
};
//开始游戏按钮
GameButtonCtl=
{Type:"Button";              //按钮类型Text:"开始游戏";               //显示click文字X:50%;                        //水平居中Y:50%;                        //垂直居中Width:150;                    //宽度100像素Height:60;                    //高度60像素FontSize:16;                  // 文字大小FontBold:true;               // 文字是否粗体FontBrush:"#ff03FCBC";      // 文字颜色BorderRadius:{10,10,10,10};CenterX:50%;                         CenterY:50%;BackgroundBrush:"#ff0D0D0D";//背景色白色IsClick:=>                    //设置click事件触发器,click按钮打印"click"{   case(owner.Text=="重新开始",{   owner.show=false;//是否能刷新怪物标记 设为trueFoePanel.RefurbishTab=true;//开启怪物刷新FoePanel.FoeRefurbish=true;},owner.Text=="开始游戏",{owner.show=false;//开启怪物刷新FoePanel.FoeRefurbish=true;});};
};Create(GameButtonCtl);                //创建按钮
//怪物信息按钮
GameFoeInfoCtl=
{Type:"Button";              //按钮类型Text:'怪物信息\r\n';               //显示click文字X:0;                        //水平居中Y:0;                        //垂直居中Width:100;                    //宽度100像素Height:90;                    //高度60像素FontSize:16;                  // 文字大小FontBold:true;               // 文字是否粗体FontBrush:"#ff03FCBC";      // 文字颜色BorderRadius:{10,0,0,0};BorderBrush:"#ffffffff";    // 边框颜色画刷BorderThickness:{1,1,1,1}; Padding:{5,5,0,0};HAlign:"left";         VAlign:"top";           IsTopToBottom:false;IsLeftToRight:false;FoeInfo:{};FoeInfo:->{case(size(owner.FoeInfo)>1,{owner.text='怪物信息\r\n血量:'+text(owner.FoeInfo.Blood)+'\r\n等级:'+text(owner.FoeInfo.Grade)+'\r\n金钱:'+text(owner.FoeInfo.Exps);},size(owner.FoeInfo)==1,{owner.text='怪物信息'; });owner.FoeInfo={};};
};
Create(GameFoeInfoCtl);                //创建按钮

然后在主函数中加怪物刷新面板“Main.ais”:

Include("3D地图/MainMap.ais");//引入3D地图模块
Include("Turret/TurretPanel.ais");//引入炮塔模块
Include("OtherTower/TransmissionTower.ais"); //引入怪物们
Include("OtherTower/LifeTower.ais");//引入中间生命塔
Include("Foe/FoePanel.ais");//引入怪物刷新面板

3D塔防游戏实现 4.2 3D怪物连续刷新(Feekood语言)相关推荐

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

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

  2. 十大iOS塔防游戏评点

    塔防游戏,即炮塔防御(Tower Defence,TD)游戏的简称.炮塔防御游戏起源于PC时代,有不少移动平台上的塔防游戏都是从PC游戏改编而来.现在除了单纯的建造炮塔防御怪物的传统模式(其中又包括固 ...

  3. unity塔防游戏怪物转向_Unity官方新手游戏项目推荐合集

    Unity官方新手游戏项目推荐合集 今天给同学们介绍一些Unity官方发布过的一些游戏项目,这些项目都简化了游戏开发的入门学习过程,可以快速地制作出游戏,适合新手入门体验,下面就带同学们看一看: Un ...

  4. IOS塔防游戏《坦克对大炮》的开发设计记录

    IOS塔防游戏<坦克对大炮>的开发设计记录 引子 游戏已经在App Store上线几个月了,一直很想写点什么记录一下.真要写的时候,却又发现无从下笔没啥好写的.在2012年进入IOS,对于 ...

  5. 超人气塔防游戏:气球塔防6 for Mac(v26.2.4058中文版)

    气球塔防6中文版Bloons TD 6是一款超人气塔防游戏,气球塔防6中文版延续前作的玩法的基础上进行创新和升级,丰富的游戏场景和完善的武器.道具系统使游戏更具趣味性和挑战性,更有关卡等你来体验,还等 ...

  6. 【HMS Core案例分享】华为分析 X 江湖游戏 | 揭秘塔防游戏的增长秘籍

    江湖游戏是一家集网络游戏发行.运营和服务于一体的公司,于2018年成立,是国内新兴的游戏发行商之一.江湖游戏凭借着3D欧美卡通塔防巨作<塔塔帝国>,以及诙谐幽默的<泡面三国>, ...

  7. (译)如何使用cocos2d制作一个塔防游戏:引子

    原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...

  8. 塔防游戏的路径寻找算法分析

    在塔防游戏中,有很多敌人都是向着同一目标前进的.在众多塔防游戏当中,有一条或几条预定好的路径.在一些塔防游戏中,比如经典的<Desktop Tower Defense>,你可以将塔放在地图 ...

  9. 用Unity开发一款塔防游戏(一):攻击方设计

    大家好.偶尔想起了这个手把手教学的.但现已长满杂草的坑,还是来挖几铲子. 这一期的游戏是最常见的类型之一--塔防. 塔防游戏相信大家并不陌生,几个主要元素如下: 1.敌方士兵 2.我方防御塔 3.我方 ...

最新文章

  1. ubuntu firefox播放不了视频的解决办法 安装chrome 解决
  2. 《c语言从入门到精通》看书笔记——第14章 文件
  3. git push时报错fatal: Could not read from remote repository.
  4. MariaDB:删除数据库报错:error: 'Error dropping database (can't rmdir './shiro', errno: 39)'
  5. python怎么用split字符串全部分开_请教一下python怎么用split对一句话拆分两次?...
  6. 和整数相乘_人教版五年级上册第1单元《小数乘整数》课件及同步练习
  7. mysql:mysql安装及一些配置和图形界面介绍
  8. Android Fragment之间的切换
  9. 温州大学c语言作业布置的网站,2016年温州大学物理与电子信息工程学院综合卷之C语言程序设计复试笔试仿真模拟题...
  10. JavaWeb开发Listener学习
  11. usb转rs232驱动无效,已经电脑自动扫描检测硬件改动.设备无法运行错误代码10
  12. MATLAB学习八(二):标准差std
  13. 简单银行管理系统C#版本
  14. 5.2 Photoshop复制图层的几种方式 [原创Ps教程]
  15. python笔记:7.2.2.2 一元多因素方差分析_交互效应图(购房面积影响因素交互效应)
  16. 计算机桌面文件能单独设密码吗,告诉你怎么给文件夹设置密码
  17. 项目实训(十二)——FPS游戏枪械射击弹孔及子弹散射
  18. 关于注册时验证邮箱,并实现类似安卓的吐丝效果
  19. ts中的never类型
  20. AD19 基础应用技巧(快速定义PCB板框,CAD中DWG转DXF格式导入)

热门文章

  1. 修复吾爱OD数据窗口双击不出现偏移问题
  2. BBS论坛项目之开发注册功能(包含详细的代码注释)
  3. 高考生隔空喊话雷军“优化 MIUI”
  4. 信号完整性(SI)电源完整性(PI)学习笔记(三)阻抗与电气模型
  5. 天刀手游微信IOS服务器,天涯明月刀手游微信十一区风华入怀
  6. 电子技术——共模抑制
  7. android q beta版本,Android Q beta 6测试版
  8. IDA中应用SIG文件
  9. Echarts地图与图表联动
  10. java基于ssm的自动排课系统