当调用setViewpointCenter方法进行设置scene位置时,PhysicsBody与Sprite 脱离,并反向运动,如何才能保持PhysicsBody与Sprite 不脱离。版本为3.15.1.
void MainScene::setViewpointCenter(Vec2 position) // 通过设置scene位置来抵消sprite运动,实现地图滚动
{
// 求出屏幕的范围包括宽和高
Size winSize = CCDirector::getInstance()->getWinSize();
//显示屏幕中心点的坐标大于屏幕宽和高的一半
int x = MAX(position.x, winSize.width / 2);
int y = MAX(position.y, winSize.height / 2);
//求出的是整个瓦片地图的宽
//_tileMap->getMapSize().width瓦片地图横向有多少个瓦片
//_tileMap->getTileSize().width每一个瓦片的宽度
int mapWidth = map->getMapSize().width * map->getTileSize().width;
int mapHeight = map->getMapSize().height *map->getTileSize().height;
x = MIN(x, mapWidth - winSize.width / 2);
y = MIN(y, mapHeight - winSize.height / 2);
//目标点
Vec2 actualPoint = Vec2(x, y);
//屏幕的中心点
Vec2 viewCenterPoint = Vec2(winSize.width / 2, winSize.height / 2);
//计算出重置显示屏幕的中心点
//ccpSub 返回的是viewCenterPoint.x - actualPoint.x和viewCenterPoint.y - actualPoint.y
Vec2 viewPoint = viewCenterPoint-actualPoint;
//重置显示屏幕的中心点
this->setPosition(viewPoint);
}