在游戏中我们往往想让英雄跟随地图走动而不超出地图边界
//得到屏幕大小
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 );