【COCOS2DX-游戏开发之三三】TMX边界控制与小窗体内预览TMX
做一款像素游戏,须要确定地图的边界。保证人物的位置位于屏幕中央。到达地图左边界。地图位置不变。人向左走,到达右边界,地步位置不变,人向右走
如:地图左边。右边,上边空出的边界。还有下方留出操作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大小,也能够是窗体)
左边界:
右边界:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ19vbnRoZXdheQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
/**
* @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 );
}
这样的依据地图放大比例来缩小视图比例的做法能够保证在一个控件窗体内预览一个场景
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ19vbnRoZXdheQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
【COCOS2DX-游戏开发之三三】TMX边界控制与小窗体内预览TMX的更多相关文章
- cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发
cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622 ...
- Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇
懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...
- cocos2d-x游戏开发系列教程-前言
cocos2d-x游戏开发前景: 最近企业对于Cocos2D-X开发人才的用人需求很大,而且所提供的薪资相当可观. 为满足广大向往游戏开发行业同学的需求,特推出适合新手的Cocos2D-X手游开发教程 ...
- cocos2d-x 游戏开发之有限状态机(FSM) (四)
cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge ...
- cocos2d-x 游戏开发之有限状态机(FSM) (三)
cocos2d-x 游戏开发之有限状态机(FSM) (三) 有限状态机简称FSM,现在我们创建一个专门的FSM类,负责管理对象(Monkey)的状态.然后Monkey类就实现了行为与状态分离.Monk ...
- cocos2d-x 游戏开发之有限状态机(FSM) (一)
cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游 ...
- cocos2d-x 游戏开发之有限状态机(FSM) (二)
cocos2d-x 游戏开发之有限状态机(FSM) (二) 1 状态模式
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
随机推荐
- hdu 4975 A simple Gaussian elimination problem.(网络流,推断矩阵是否存在)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4975 Problem Description Dragon is studying math. One ...
- android的事件分发机制理解
android的事件分发机制理解 1.事件触发主要涉及到哪些层面的哪些函数(个人理解的顺序,可能在某一层会一次回调其它函数) activity中的dispatchTouchEvent .layout中 ...
- javascript每日一练(十)——运动二:缓冲运动
一.缓冲运动 实现原理:(目标距离-当前距离) / 基数 = 速度(运动距离越大速度越小,运动距离和速度成反比) (500 - oDiv.offsetLeft) / 7 = iSpeed; 需要注意: ...
- Orleans is a framework
Introduction Orleans is a framework that provides a straightforward approach to building distributed ...
- Qt实现QQ好友下拉列表(用QListView实现,所以还得定义它的Model)
偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能: 1.可以删除列表中图标 2.可以像qq一样的,把某个分组下的图标转移到另外的分组 3.添加分组 ...
- 基于visual Studio2013解决C语言竞赛题之0901文件读写
题目
- c++,初始化列表
类对象的构造顺序是这样的: a.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 b.进入构造函数后在构造函数中执行一般计算 1.初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内 ...
- BZOJ 3173: [Tjoi2013]最长上升子序列( BST + LIS )
因为是从1~n插入的, 慢插入的对之前的没有影响, 所以我们可以用平衡树维护, 弄出最后的序列然后跑LIS就OK了 O(nlogn) --------------------------------- ...
- Tomcat 7最大并发连接数的正确修改方法(转)
几乎所有的中文网页都介绍,要修改Tomcat的默认最大并发连接数,应该进行如下设置(实际上这些步骤是错误的): -------------------------------------------- ...
- CSDN-Code平台使用过程中的5点经验教训
昨天又创建了一个项目,fucms,可是本地一直没有权限提交,搞了非常久,试了几十次,都不行,我是非常的灰心和郁闷. 刚刚,和CSDN-Code的官方客服咨询了非常久非常久,最终摸索出来了一些心得体会 ...