【COCOS2DX-游戏开发之三三】TMX边界控制与小窗口内预览TMX


做一款像素游戏,需要确定地图的边界,保证人物的位置位于屏幕中央,到达地图左边界,地图位置不变,人向左走,到达右边界,地步位置不变,人向右走

如:地图左边,右边,上边空出的边界,还有下方留出操作按钮


这种游戏一般情况下地图会大于窗口大小,人物要保持在屏幕(或窗口)中央,设置地图的位置,地图的位置应该是[win_size.width– Map_SpaceX –map_size.widthleft_space],上下和左右原理相同


Map_SpaceX 地图左右留出空间一般情况下相等

Map_SpaceTop 地图上方空间

Map_SpaceBottom 地图下方空间(留出按钮大小)

Size map_size 地图大小

Size win_size 窗口大小(可以是一个view大小,也可以是窗口)


左边界:



右边界:



[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * @brief adjustMapPos 调整地图的位置,保证人物在屏幕中央(左右边界特殊处理),人物在地图坐标系内 
  3.  * @param map 地图节点 
  4.  * @param map_origin_size  地图原始大小(没有缩放) 
  5.  */  
  6. void adjustMapPos(cocos2d::Node *map, const cocos2d::Size &map_origin_size)  
  7. {  
  8.     // 外界我们可以将地图放大mViewScale倍, 效果等效于将视图窗口缩小mViewScale倍  
  9.     cocos2d::Size win_size = mViewSize / mViewScale;  
  10.     cocos2d::Size map_size = map_origin_size;  
  11.     cocos2d::Point ptRole = mTargetPos;  
  12.   
  13.     int MAP_SPACE_X = Configure::Map_SpaceX;  
  14.     int MAP_SPACE_BOTTOM = Configure::Map_SpaceBottom;  
  15.     int MAP_SPACE_TOP = Configure::Map_SpaceTop;  
  16.   
  17.     float x = 0.f;  
  18.     float y = 0.f;  
  19.     if (map_size.width >= win_size.width - MAP_SPACE_X * 2) {  
  20.         if (MAP_SPACE_X + ptRole.x  <= win_size.width/2) {  
  21.             x = MAP_SPACE_X;  
  22.         } else if (map_size.width - ptRole.x + MAP_SPACE_X <= win_size.width/2 ) {  
  23.             x = (win_size.width - MAP_SPACE_X) - map_size.width;  
  24.         } else {  
  25.             x = win_size.width/2 - ptRole.x ;  
  26.         }  
  27.     } else {  
  28.         x = (win_size.width - map_size.width)/2;  
  29.     }  
  30.   
  31.     if (map_size.height >= win_size.height - MAP_SPACE_TOP - MAP_SPACE_BOTTOM) {  
  32.         if (ptRole.y + MAP_SPACE_BOTTOM <= win_size.height/2) {  
  33.              y = MAP_SPACE_BOTTOM;  
  34.         } else if (map_size.height - ptRole.y + MAP_SPACE_TOP <= win_size.height/2) {  
  35.             y = win_size.height - MAP_SPACE_TOP - map_size.height;  
  36.         } else {  
  37.             y = win_size.height/2 - (ptRole.y);  
  38.         }  
  39.     } else {  
  40.         y = MAP_SPACE_BOTTOM;  
  41.     }  
  42.   
  43.     map->setPosition(x, y );  
  44. }  

这种根据地图放大比例来缩小视图比例的做法可以保证在一个控件窗口内预览一个场景


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值