在遊戲中我們往往想讓英雄跟隨地圖走動而不超出地圖邊界
//得到屏幕大小
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 );