【COCOS2DX-游戏开发之三三】TMX边界控制与小窗体内预览TMX
2016-01-31 16:17
579 查看
做一款像素游戏,须要确定地图的边界。保证人物的位置位于屏幕中央。到达地图左边界。地图位置不变。人向左走,到达右边界,地步位置不变,人向右走
如:地图左边。右边,上边空出的边界。还有下方留出操作button
这样的游戏普通情况下地图会大于窗体大小。人物要保持在屏幕(或窗体)中央。设置地图的位置。地图的位置应该是[win_size.width– Map_SpaceX
–map_size.width,left_space]。上下和左右原理同样
Map_SpaceX
地图左右留出空间普通情况下相等
Map_SpaceTop
地图上方空间
Map_SpaceBottom
地图下方空间(留出button大小)
Size map_size
地图大小
Size win_size
窗体大小(能够是一个view大小,也能够是窗体)
左边界:
右边界:
/** * @brief adjustMapPos 调整地图的位置,保证人物在屏幕中央(左右边界特殊处理),人物在地图坐标系内 * @param map 地图节点 * @param map_origin_size 地图原始大小(没有缩放) */ void adjustMapPos(cocos2d::Node *map, const cocos2d::Size &map_origin_size) { // 外界我们能够将地图放大mViewScale倍, 效果等效于将视图窗体缩小mViewScale倍 cocos2d::Size win_size = mViewSize / mViewScale; cocos2d::Size map_size = map_origin_size; cocos2d::Point ptRole = mTargetPos; int MAP_SPACE_X = Configure::Map_SpaceX; int MAP_SPACE_BOTTOM = Configure::Map_SpaceBottom; int MAP_SPACE_TOP = Configure::Map_SpaceTop; float x = 0.f; float y = 0.f; if (map_size.width >= win_size.width - MAP_SPACE_X * 2) { if (MAP_SPACE_X + ptRole.x <= win_size.width/2) { x = MAP_SPACE_X; } else if (map_size.width - ptRole.x + MAP_SPACE_X <= win_size.width/2 ) { x = (win_size.width - MAP_SPACE_X) - map_size.width; } else { x = win_size.width/2 - ptRole.x ; } } else { x = (win_size.width - map_size.width)/2; } if (map_size.height >= win_size.height - MAP_SPACE_TOP - MAP_SPACE_BOTTOM) { if (ptRole.y + MAP_SPACE_BOTTOM <= win_size.height/2) { y = MAP_SPACE_BOTTOM; } else if (map_size.height - ptRole.y + MAP_SPACE_TOP <= win_size.height/2) { y = win_size.height - MAP_SPACE_TOP - map_size.height; } else { y = win_size.height/2 - (ptRole.y); } } else { y = MAP_SPACE_BOTTOM; } map->setPosition(x, y ); }
这样的依据地图放大比例来缩小视图比例的做法能够保证在一个控件窗体内预览一个场景
相关文章推荐
- cocos2dx 3.3 pluginx tools文件夹分析
- cocos studio 半角空格和全角空格
- Windows7环境下搭建Cocos2d-x3.3环境并配置android交叉编译环境
- Cocos2d-x 3.x 无法打开包含文件extensions/ExtensionExport.h的解决
- Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法
- Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法
- Cocos2D v3.4.9粒子效果不能显示的原因分析及解决办法
- Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)
- cocos2d-x Button的监听使用
- cocos2d-x 创建精灵的五种方法
- Cocos2d-x 用lambda表达式实现监听,改变精灵的透明度和层级
- cocos2d-x-3.8.1 WP8 竖屏解决办法
- Cocos移植到Android的一些问题-中文乱码问题
- 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖
- cocos2dx 3.0 飞机大战
- cocos2dx中使用tiled地图实现sprite动态遮挡
- 使用quick-cocos-x接入GameCenter
- cocos2dx - Sqlite简单封装使用
- cocospod 安装和使用(汇总)
- Windows下Cocos2dx-3.10的Android交叉编译环境搭建