游戏开发论坛

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

3D塔防游戏实现 1.3 2D小地图控制3D地图视角(Feekood语言)

[复制链接]

8

主题

9

帖子

804

积分

高级会员

Rank: 4

积分
804
发表于 2015-2-28 23:00:01 | 显示全部楼层 |阅读模式
本帖最后由 xxx19900915 于 2015-2-28 23:01 编辑

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

—————————————-
在之前的文章中已经实现的3D地图3D视角控制器。那么接下来我们来完成左下角的2D小地图控制3D地图的视角。
2D地图如下图:(点击后视角会跟随移动)
········

首先准备资源如下:源码链接: http://pan.baidu.com/s/1jGf4h4U 密码: 2vua

代码只有70行。(加注释后就变多了,见谅!)


  1. LoadImage("2DMapImg","2DMap.png"); // 2D小地图图片
  2. LoadImage("frameImg","frame.png");//地图中的框
  3. LoadImage("FoeShowImg","FoeShow.png");//四个方向的红条

  4. Map2DFrame=    //地图中的框精灵
  5. {
  6.   type:"sprite";//精灵类型                     
  7.   texture:"frameImg";  //纹理为框的那个图              
  8.   blend:"alpha";//纹理透明
  9.   width:40;                        
  10.   height:30;
  11.   ZOrder:50;//设置精灵的层次 越大约在上面
  12.   CenterX:50%; //精灵X中心                     
  13.   CenterY:50%; //精灵Y中心
  14.   x:100;
  15.   // 可以print(sys());查看具体信息
  16.   y:sys().height-100;  // sys().height为屏幕的高度
  17. };
  18. Map2DFoeShow= //地图中的红条精灵(出怪闪动)
  19. {
  20.   type:"sprite";    //精灵类型                  
  21.   texture:"FoeShowImg";   //纹理为红条的那个图            
  22.   blend:"alpha";//纹理透明
  23.   width:5;                        
  24.   height:50;
  25.   ZOrder:50;//设置精灵的层次 越大约在上面
  26.   CenterX:50%; //精灵X中心                        
  27.   CenterY:50%; //精灵Y中心
  28.   x:185;                              
  29.   y:sys().height-100; // sys().height为屏幕的高度
  30.   show:false;  //默认隐藏
  31.   ShowTime:0;  //一个内置变量 控制时间用的
  32.   show:->{     //当内部变量“show” 变化时  会执行下列操作
  33.      case(owner.show,    //自己的变量为true时执行
  34.      {
  35.          owner.ShowTime=0;  //内部变量ShowTime 赋值为0
  36.          // 内部变量ShowTime在500毫秒内从0变到1,
  37.          // 然后执行内部变量show为fasle  (意思就是500毫秒后隐藏精灵)
  38.          owner.ShowTime<:{0,1,500}<::{owner.show=false;};
  39.       });   
  40.   };
  41. };
  42. //创建东面红条
  43. Create(Map2DFoeShowEast={}::Map2DFoeShow);
  44. //创建南面红条  X、Y坐标改变。Rotation为旋转度属性
  45. Create(Map2DFoeShowSouth={x:100;y:sys().height-12;Rotation:90;}::Map2DFoeShow);
  46. //创建西面红条  X、Y坐标改变。Rotation为旋转度属性
  47. Create(Map2DFoeShowWest={x:10;}::Map2DFoeShow);
  48. //创建北面红条  X、Y坐标改变。Rotation为旋转度属性
  49. Create(Map2DFoeShowNorth={x:100;y:sys().height-190;Rotation:90;}::Map2DFoeShow);
  50. //创建中间的方框
  51. Create(Map2DFrame);
  52. //创建2D地图
  53. Create(
  54. {
  55.     type:"sprite"; //精灵               
  56.     texture:"2DMapImg"; //2D地图               
  57.     blend:"alpha";
  58.     width:200;                        
  59.     height:200;
  60.     x:0;                              
  61.     y:sys().height-200;  
  62.     IsHitPass:false;  //是否被穿透   不被穿透
  63.     IsHitTest:true;   //是否被点击   能被点击
  64.     IsClick:=> {      //点击事件的操作
  65.     //内置属性HitY、HitX为点击点的坐标(相对于精灵自身的左上角为0.0点)
  66.         //sys().height-200为2D地图左上角0点  +owner.hity获得点击点Y坐标
  67.         Map2DY=sys().height-200+owner.hity;
  68.         //控制组件的框精灵的X 在500毫秒内变到点击的X点
  69.         Map2DFrame.x<:{owner.hitx,500};  
  70.         //控制组件的框精灵的Y 在500毫秒内变到点击的Y点
  71.         Map2DFrame.y<:{Map2DY,500};
  72.         //以下以2D与中心为0.0点,计算点击点在这个地图的百分比取
  73.         //例如左上:X为-30%,Y为-10%
  74.         oppositeX=(owner.hitx-100)/100;
  75.         oppositeZ=(owner.hity-100)/100;
  76.         //向主地图的opposite属性传递数据
  77.         Getdata("MainMap").opposite={x:oppositeX;z:oppositeZ};
  78.     };
  79.     IsMouseEnter:=> {  //鼠标进入
  80.         MainCamera.AllowHRotation=false;  //关闭3D视角的旋转
  81.     };
  82.     IsMouseLeave:=> {  //鼠标离开
  83.        MainCamera.AllowHRotation=true; //开启3D视角的旋转
  84.     };
  85.     show:true;  //显示2D地图
  86. });
复制代码

完成后可以看看文件夹逻辑:

然后在修改在上一章的 “3D地图/MainMap.ais”脚本中的代码:

  1. include("MapBase.ais");//引入地图基础文件
  2. include("../navcontrol/UiPanel.ais");//应用视角文件
  3. include("2DMap/2Dmap.ais");//引入2D地图
  4. create({
  5.     //主地图名称  可以通过Getdata("MainMap")获取  2D地图中用到
  6.     name:"MainMap";
  7.     opposite:{};
  8.     opposite:->{ //通过2D地图传送比例过来
  9.         //3D地图的长宽都为32格,然后每格大小为4  所以总的长宽都为120左右
  10.         //所以3D地图的四个区域的大小都是60*60
  11.         TargetX=60*(owner.opposite.X);//根据传过来的比例算3D空间的X
  12.         TargetZ=60*(owner.opposite.Z);//根据传过来的比例算3D空间的Z
  13.         TargetY=MainCamera.Position->1;//获取当前视角的3D空间的Y
  14.         //控制500毫秒内移动到目标3D视角中眼镜的空间坐标
  15.         MainCamera.Position<:{{TargetX,TargetY,TargetZ+40},500};
  16.         //控制500毫秒内移动到目标3D视角中目标物的空间坐标
  17.         MainCamera.Target<:{{TargetX,0,TargetZ},500};
  18.     };   
  19. }::MapA);//创建地图,::为继承
复制代码

最终效果:

下面给出这个阶段的整体源码:包括3D地图、3D地图视角控件、2D地图控制3D地图。

源码链接: http://pan.baidu.com/s/1o6idOca 密码: rbx3


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

本版积分规则

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

GMT+8, 2025-2-25 20:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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