cocos2d-x 以主角为中心移动地图(学习笔记)

在游戏中我们往往想让英雄跟随地图走动而不超出地图边界

//得到屏幕大小

Size visibleSize = Director::getInstance()->getVisibleSize();

//得到地图方块的数量

Size mapTiledNum = m_gGameMap->getMapSize();

//得到方块的大小

Size tiledSize = m_gGameMap->getTileSize();

//根据方块数量和方块尺寸得到地图的尺寸

Size mapSize = Size( mapTiledNum.width * tiledSize.width, mapTiledNum.height * tiledSize.height );

//主角坐标

Vec2 vPos = m_gSprite->getPosition();

//如果主角坐标小于屏幕的一半,则取屏幕重点坐标,否则取主角坐标

float  x = MAX( vPos.x , visibleSize.width/2 );

float y = MAX( vPos.x , visibleSize.height/2 );

//如果x,y的坐标大于地图右上角的坐标,则取地图右上角的坐标,这步是为了防止地图超出屏幕造成出现黑边的情况

x = MIN( x , mapSize.width - visibleSize.width/2 );

y = MIN( y , mapSize.height - visibleSize.height/2 );

//目标点

Vec2 destPos = Vec2( x , y );

//屏幕中心点

Vec2 centerPos = Vec2( visibleSize.width/2 , visibleSize.height/2 );

//屏幕中心点和所要移动的目标点之间的距离

Vec2 viewPos = centerPos - destPos;

//设置层位置

this->setPosition(  viewPos  );


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值