游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4692|回复: 0

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

[复制链接]

8

主题

9

帖子

804

积分

高级会员

Rank: 4

积分
804
发表于 2015-3-1 19:29:22 | 显示全部楼层 |阅读模式
本帖最后由 xxx19900915 于 2015-3-1 19:30 编辑

(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”如下:

  1. LoadImage("TurretAImg","Img/TurretA.png"); // 读取图片资源
  2. LoadImage("TurretA_hoverImg","Img/TurretA_hover.png"); // 读取图片资源
  3. TurretASpriteBtn=
  4. {
  5.     type:"sprite";       // 精灵类型
  6.     texture:"TurretAImg";   // 纹理图片资源名
  7.     blend:"alpha";       // 设置为透明
  8.     x:120;                 // 显示坐标
  9.     y:35;                 // 显示坐标
  10.     width:60;             // 显示宽度
  11.     height:60;            // 显示高度
  12.     CenterX:50%;           // 中心点坐标x(50%表示图中心)
  13.     CenterY:50%;           // 中心点坐标y(50%表示图中心)
  14.     IsHitTest:true;         //是否被点击
  15.     IsMouseDown:=> {        //精灵被按下
  16.         owner.texture="TurretA_hoverImg";   //改变纹理为选择后的图
  17.     };
  18. };
  19. Create(TurretASpriteBtn);  //创建按钮精灵
复制代码

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

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

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

  48.         xx2=PX1*cos(pi()*owner.rotation/180)+PZ*sin(pi()*owner.rotation/180);     
  49.         zz2=(-1*PX1)*sin(pi()*owner.rotation/180)+PZ*cos(pi()*owner.rotation/180);
  50.         //更新两炮弹的X.Y.Z及旋转度
  51.         Getdata(owner.leftName).x=owner.x+xx1;
  52.         Getdata(owner.leftName).y=owner.y+1;
  53.         Getdata(owner.leftName).z=owner.z+zz1;
  54.         Getdata(owner.leftName).Rotation=owner.Rotation;
  55.         Getdata(owner.rightName).x=owner.x+xx2;
  56.         Getdata(owner.rightName).y=owner.y+1;
  57.         Getdata(owner.rightName).z=owner.z+zz2;
  58.         Getdata(owner.rightName).Rotation=owner.Rotation;
  59.         //保存初始化的两炮弹位置
  60.         owner.OldXZ={Lx:owner.x+xx1;Lz:owner.z+zz1;Rx:owner.x+xx2;Rz:owner.z+zz2};
  61.     };
  62.     Rotation:0; //旋转度
  63.     ScopeRadius: 2; //模型的范围半径
  64.     ShowScope: true; //显示模型的范围半径
  65.     show:true;     //显示
  66.     show:->        //控制左右炮弹的显示与隐藏
  67.     {
  68.        Getdata(owner.leftName).show=owner.show;
  69.        Getdata(owner.rightName).show=owner.show;   
  70.     };
  71.     //炮塔移动时炮弹也跟着移动
  72.     x:->{
  73.       Getdata(owner.leftName).x=owner.x;
  74.       Getdata(owner.rightName).x=owner.x;   
  75.     };
  76.     z:->{
  77.       Getdata(owner.leftName).z=owner.z;
  78.       Getdata(owner.rightName).z=owner.z;   
  79.     };
  80. };

  81. create(TurretBaseMesh);//创建炮塔
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-17 10:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表