(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; //目标位置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;//标记以及到达
};
//消除自己
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),
{ //波数+1
owner.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 = true
case(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;
//是否能刷新怪物标记 设为true
FoePanel.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语言)
原文地址:http://blog.csdn.net/xxx19900915/article/details/44086783