当地图过大,屏幕不能完全加载时,需要使地图在精灵移动过中点时,地图能保持精灵在屏幕中心。
精灵和地图必须加载在相同的Layer,精灵移动,Layer相对移动,才能使精灵保持在屏幕中心。
//判断英雄坐标和屏幕中心的大小,若英雄超过中点则取英雄坐标
int x=MAX(this->_hero->getPositionX(),winSize.width/2);
int y=MAX(this->_hero->getPositionY(),winSize.height/2);
//英雄超过屏幕中点时,英雄往前移动,地图往后移动,英雄移动到地图边不移动
//英雄移动到最后地图边和屏幕边重合时即坐标为 地图尺寸-屏幕尺寸/2时,地图不移动
x=MIN(x,this->_tileMap->getTileSize().width*this->_tileMap->getMapSize().width - winSize.width/2);
y=MIN(y,this->_tileMap->getTileSize().height*this->_tileMap->getMapSize().height - winSize.height/2);
CCPoint actualPosition=ccp(x,y);
CCPoint centerOfView=ccp(winSize.width/2,winSize.height/2);
//获得地图需要移动到的坐标点
CCPoint viewPoint=ccpSub(centerOfView,actualPosition);
this->setPosition(viewPoint);