3D塔防游戏实现 2.1 创建炮塔(Feekood语言)

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

——————————
上一阶段实现的3D地图、2D地图、3D视角控制器。
下来我们一起来创建炮塔,分为两个阶段:
1.创建炮塔精灵按钮、3D模型。
2.管理建炮塔规则(不重叠、高地建设、在3D地图上创建炮塔)。

今天介绍创建炮塔精灵按钮、3D模型:
源码链接: http://pan.baidu.com/s/1dDlJXfj 密码: h2an

这里写图片描述在上一阶段的文件夹的基础上新建文件夹“Turret”

1.创建炮塔精灵按钮:
这里写图片描述 ….这里写图片描述
脚本:“TurretSpriteBtn.ais”如下:

LoadImage("TurretAImg","Img/TurretA.png"); // 读取图片资源
LoadImage("TurretA_hoverImg","Img/TurretA_hover.png"); // 读取图片资源
TurretASpriteBtn=
{
    type:"sprite";       // 精灵类型
    texture:"TurretAImg";   // 纹理图片资源名
    blend:"alpha";       // 设置为透明
    x:120;                 // 显示坐标
    y:35;                 // 显示坐标
    width:60;             // 显示宽度
    height:60;            // 显示高度
    CenterX:50%;           // 中心点坐标x(50%表示图中心)
    CenterY:50%;           // 中心点坐标y(50%表示图中心)
    IsHitTest:true;         //是否被点击
    IsMouseDown:=> {        //精灵被按下
        owner.texture="TurretA_hoverImg";   //改变纹理为选择后的图
    };
};
Create(TurretASpriteBtn);  //创建按钮精灵

2.创建3D炮塔:
炮弹平移两大1时————————————-炮弹偏移量正常
这里写图片描述……这里写图片描述
脚本:“TurretMesh.ais”如下:

LoadImage("TurretImg",":/Wooyoo/tower/turret01.jpg");  //炮塔纹理
//炮塔模型
LoadModel("TurretA1model",":/Wooyoo/tower/flame_thrower_01.obj","obj");
//炮弹模型
BulletA=IncludeAisx(":/Wooyoo/window7/ROCKETMOUNT3.aisx");
BulletA.action="WALK";//炮弹动画
BulletA.Scale={0.2,0.2,0.2};//缩放炮弹模型
//炮塔模型数据
TurretBaseMesh=   
{
    type:"mesh";   //类型  mesh
    model:"TurretA1model"; //模型为炮塔A
    texture:"TurretImg";   //模型的纹理
    SimplerState:"wrap";   
    Shader:"phong";
    Scale:{0.6,0.6,0.6};   //缩放下模型大小
    leftName:"";           //存储左炮弹名称
    rightName:"";          //存储右炮弹名称
    x:0;
    y:0;
    z:0;
    OldXZ:{};  //保存炮弹的初始XZ坐标 
    //isloaded为创建后执行一次的事件,这里为创建左右炮弹
    isloaded:=>{
        PX=1.25;    //右炮弹X平移炮弹的 
        PX1=-1.25;  //左炮弹X平移
        PZ=1.3;     //炮弹Z平移
        //根据炮塔模型的旋转角度来计算左右两炮弹的位置
        xx1=PX*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
        zz1=(-1*PX)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);

        xx2=PX1*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
        zz2=(-1*PX1)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180); 
        //创建左右两炮塔
        owner.leftName=create({x:owner.x+xx1;y:owner.y+1;z:owner.z+zz1;Rotation:owner.Rotation;show:owner.show}::BulletA);
        owner.rightName=create({x:owner.x+xx2;y:owner.y+1;z:owner.z+zz2;Rotation:owner.Rotation;show:owner.show}::BulletA);
        //保存初始化的炮弹位置
        owner.OldXZ={Lx:owner.x+xx1;Lz:owner.z+zz1;Rx:owner.x+xx2;Rz:owner.z+zz2};
    };
    //炮塔旋转度变化时刷新炮弹角度与位置
    BreakRotation:false;
    BreakRotation:=>{
        PX=1.25;   //右炮弹X平移
        PX1=-1.25; //左炮弹X平移
        PZ=1.3;    //炮弹Z平移
        //根据炮塔模型的旋转角度来计算左右两炮弹的位置
        xx1=PX*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
        zz1=(-1*PX)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);

        xx2=PX1*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
        zz2=(-1*PX1)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180); 
        //更新两炮弹的X.Y.Z及旋转度
        Getdata(owner.leftName).x=owner.x+xx1;
        Getdata(owner.leftName).y=owner.y+1;
        Getdata(owner.leftName).z=owner.z+zz1;
        Getdata(owner.leftName).Rotation=owner.Rotation; 
        Getdata(owner.rightName).x=owner.x+xx2;
        Getdata(owner.rightName).y=owner.y+1;
        Getdata(owner.rightName).z=owner.z+zz2;
        Getdata(owner.rightName).Rotation=owner.Rotation;
        //保存初始化的两炮弹位置
        owner.OldXZ={Lx:owner.x+xx1;Lz:owner.z+zz1;Rx:owner.x+xx2;Rz:owner.z+zz2};
    };
    Rotation:0; //旋转度
    ScopeRadius: 2; //模型的范围半径
    ShowScope: true; //显示模型的范围半径
    show:true;     //显示
    show:->        //控制左右炮弹的显示与隐藏 
    {
       Getdata(owner.leftName).show=owner.show;
       Getdata(owner.rightName).show=owner.show;   
    };
    //炮塔移动时炮弹也跟着移动
    x:->{
      Getdata(owner.leftName).x=owner.x;
      Getdata(owner.rightName).x=owner.x;    
    };
    z:->{
      Getdata(owner.leftName).z=owner.z;
      Getdata(owner.rightName).z=owner.z;    
    };
};

create(TurretBaseMesh);//创建炮塔
//  print(TurretMesh);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值