void MainScene::setViewpointCenter(const Point &position) { Size winSize = Director::getInstance()->getWinSize(); int x = MAX(position.x, winSize.width / 2); int y = MAX(position.y, winSize.height / 2); x = MIN(x, (_tileMap->getMapSize().width * _tileMap->getTileSize().width) - winSize.width / 2); y = MIN(y, (_tileMap->getMapSize().height * _tileMap->getTileSize().height) - winSize.height / 2); Point actualPosition(x, y); Point centerOfView(winSize.width / 2, winSize.height / 2); Point viewPoint = centerOfView - actualPosition; _tileMap->setPosition(viewPoint); }
void Player::updatePosition(){ // 先更新地图位置,再更新角色的位置 float x = MAX(_mx,WINDOW_WIDTH/2); float y = MAX(_my,WINDOW_HEIGHT/2); x = MIN(x,Game->sMapWidth-WINDOW_WIDTH/2); y = MIN(y,Game->sMapHeight-WINDOW_HEIGHT/2); Point actualPoint(x,y); Point centerOfView(WINDOW_WIDTH/2,WINDOW_HEIGHT/2); Point viewpoint = centerOfView - actualPoint; // 设置 tmx 地图位置 Game->getGameMap()->getTMXMap()->setPosition(viewpoint); // 设置 player 位置 setPosition(viewpoint + Point(_mx,_my)); }