【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中显示一行文字 之前的内 ...
随机推荐
- 嵌入式:使用dd命令制作烧写文件
1. 使用dd命令制作烧写文件 环境: bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtd ...
- DeDeCMS中如何实现下拉菜单
在5.7版本,已经有比较简单的方法实现下拉菜单,我们可以用它已有方法,也可以用我写的第二种方法来实现 1. 在需要下拉菜单的地方加入以下代码 <div id="navMenu" ...
- InputStream中read()与read(byte[] b)
原文:InputStream中read()与read(byte[] b) read()与read(byte[] b)这两个方法在抽象类InputStream中前者是作为抽象方法存在的,后者不是,JDK ...
- powerMock比easyMock和Mockito更强大(转)
powerMock是基于easyMock或Mockito扩展出来的增强版本,所以powerMock分两种类型,如果你习惯于使用easyMock的,那你就下载基于easyMock的powerMock,反 ...
- perl 面向对象 use base
1.XXX.pm 文件里面的第一行要是:package XXX: 2.要有构造函数 sub new,实现如下: sub new { my $class = shift; # Get the reque ...
- hive怎样处理多分隔符数据
问题描写叙述: 大数据维稳需求中,客户提供的測试数据为多个字符做分隔符('|#'),在pig中会直接报错,hive中仅仅认第一个分隔符. 因为数据量比較大(160G),在文本中替换成单个字符分 ...
- sql: sql developer tunnel转接
Use putty tunnel instead of login terminal server 有时候本地直接ping不通sql 的server, 但另一个server能连上,这时就可以把端口和i ...
- C#由变量捕获引起对闭包
C#由变量捕获引起对闭包的思考 前言 偶尔翻翻书籍看看原理性的东西确实有点枯燥,之前有看到园中有位园友说到3-6年工作经验的人应该了解的.NET知识,其中就有一点是关于C#中的闭包,其实早之前在看 ...
- Reader开发(二)增加PDF阅读功能
最近任务很多很忙,所以更新博客的速度很慢. 大概上周就为Reader加了一个PDF阅读的功能,但是一直没时间写上来.昨晚找一下文件发现扩展了功能的Demo居然在文件目录下看不到任何文件,但是却显示有文 ...
- jquery子元素过滤选择器
:nth-child('索引值')//获取指定元素下的某个子元素的位置,索引从1开始: //偶数行 //$('li:nth-child(even)').addClass ...