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

如:地图左边。右边,上边空出的边界。还有下方留出操作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的更多相关文章

  1. cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发

     cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622     ...

  2. Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...

  3. cocos2d-x游戏开发系列教程-前言

    cocos2d-x游戏开发前景: 最近企业对于Cocos2D-X开发人才的用人需求很大,而且所提供的薪资相当可观. 为满足广大向往游戏开发行业同学的需求,特推出适合新手的Cocos2D-X手游开发教程 ...

  4. cocos2d-x 游戏开发之有限状态机(FSM) (四)

    cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge ...

  5. cocos2d-x 游戏开发之有限状态机(FSM) (三)

    cocos2d-x 游戏开发之有限状态机(FSM) (三) 有限状态机简称FSM,现在我们创建一个专门的FSM类,负责管理对象(Monkey)的状态.然后Monkey类就实现了行为与状态分离.Monk ...

  6. cocos2d-x 游戏开发之有限状态机(FSM) (一)

    cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游 ...

  7. cocos2d-x 游戏开发之有限状态机(FSM) (二)

    cocos2d-x 游戏开发之有限状态机(FSM)  (二) 1 状态模式

  8. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  9. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

随机推荐

  1. [转]在linux下如何判断是否已经安装某个软件?软件安装在哪个目录

    <1>在linux下如何判断是否已经安装某个软件? ++++++++++++++++++++++++++++++++++++++++++ rpm -qa|grep 软件包 ++++++++ ...

  2. linux eclipse中运行android AVD 错误

    当使用android的AVD时提示以下错误: Starting emulator for AVD 'NexusOne' ERROR: 32-bit Linux Android emulator bin ...

  3. android之wifi开发

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点 ...

  4. perl 面向对象 new方法

    [root@wx03 test]# cat Scan.pm package Scan; sub new{ my $class = shift; my $self={ 'a'=>11, 'b'=& ...

  5. WOJ 1014

    #include<stdio.h> #include<stdlib.h> #include<math.h> int main() { double a[3][3]= ...

  6. [zencart教程]zencart外贸建站仿站交流俱乐部

    [zencart教程]zencart外贸建站仿站交流俱乐部 1.你想自主一天仿做一个精美的zencart 外贸网站; 2.你想自已自主定制精美的psd 图 zencart模板,并把它变成自定义精美 z ...

  7. 打算自己做app,你们做过吗?

    最近手头上资金不足,想自己搞一下app赚点广告费,解决一下自己的零花钱问题,各位有没有做自己的app呢?打算用有米广告,各位觉得怎么样? 你们的收益是如何呢?能在这里晒晒吗?

  8. Swift - 判断设备方向(或监听设备方向的改变)

    通过UIDevice.currentDevice()来获取设备,可以取得设备当前的方向. 同时,我们可以添加一个通知来监听设备方向的变化,这样在开发中可以对不同的方向定制不同的排版布局界面. 下面通过 ...

  9. Android播放音乐时跳动的屏谱demo

    Android实现播放音频时的跳动频谱,并实现可以调节的均衡器. Main.java package com.wjq.audiofx; import android.app.Activity; imp ...

  10. HTML+CSS+JS - 5秒钟之后跳转页面

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...