cocos2dx 3.0 physicsBody做滚屏地图有bug

 Sprite* s = Sprite::create("CloseNormal.png");
 s->setPosition(Point(_pCenterX+300,_pCenterY-200));
 s->setAnchorPoint(Point::ANCHOR_MIDDLE);
 s->setPhysicsBody(PhysicsBody::createBox(Size(50, 50)));

 layer->addChild(s,10);
 layer->runAction(CCMoveBy::create(5,1000));
 //scene->runAction(CCMoveBy::create(5,1000));


```


尝试用cocos2dx3.0的新碰撞的物理碰撞引擎,如上代码,挡我移动sprite父节点layer的时候,sprite与他的physicsbody保持屏幕相对位置不动
这个现象我理解为physicsbody是在世界坐标系下的,是由scene管理的,所以layer即使移动了,但physics body 绑定了sprite 让它不移动。
那好把,我移动scene, 这次Physicsbody果然移动了,不过sprite还是相对于屏幕不动,这是为什么呢,我真是一头雾水,难道physicsbody不是使用和sprite绑定的么。

我想要利用物理引擎做一款横版闯关游戏,不可避免要移动场景,如果physicsbody不能跟随移动的话就很麻烦,不知道有没有大神提供一些解决方案

同问,今天花了我一天在这蛋疼的问题上

直接移动Sprite, 要移动场景就移动场景上的所有节点.

Lz 我也发现了同样的问题, 我是用TileMap的对象层的折线画出地形 根据地形 创建地形碰撞边缘 但是这个地形无法跟着地图移动 ,哎 折腾好久了 ,不知道楼主解决了没

在UPDATE里面进行修改,把physicbody与Sprite分离开,用UPdate同步起来

关键在这里
void GameScene::update(float dt)
{
now = player->fake->getPosition();//获取当前body的位置
Point offset=now-last;//body在给定速度的情况下在0.1s内的位移量
this->getScene()->setPosition(this->getScene()->getPositionX()-offset.x, this->getPositionY());//移动整体scene
player->fake->setPosition(Point(player->fake->getPositionX()+offset.x,player->fake->getPositionY()));//整体scene的移动导致body被移动,现在我们把它还原到正常位置
last = player->fake->getPosition();
player->play->setPosition(player->body->getPosition());//把用于显示的spirte附着在Physicbody上面,就像一层皮肉附着在骨头上一样
}

详情在附件里面有我修改后的代码,本来发了个帖子专门探讨这个问题,结果点击发表以后就渺无音信了,同时希望有人可以告诉我BOX2D会有这样问题吗?或者说物理引擎的这个问题现在有修复BUG或官方解决方案吗

1赞

我的解决方案:
我是在layer里加了一个TiledMap,sprite再加到TiledMap里的。遇到的情况和你一样,而且还有奇怪的点:若sprite静止,你移动地图,sprite是不动的,保持在physicsworld的某个位置;而sprite Moveto的话,你移动地图 ,sprite会跟着地图移动,而且在map上的移动路径不会变。
然后,我也搞了一天真是郁闷死了。
后来我想到了将tiledMap也加上一个body,设置body为collisionMask为0,大小和map一致(不一致也应该可以)。现在是你移动map,sprite也能跟着移动了。但是,这里会出现新问题:你map的默认anchorpoint为0,0 ,加上body后变为0.5,0.5而且不能设置了,所以之后对map的控制都要以0.5的来处理。
我觉得以上几点都应该算bug吧。。。
后来我稍微看了下源码,也没找出问题出在哪里。chipmunk 和box没时间去研究space是怎么对body影响的。就先这样草草了解吧。

请问 最总如何解决的该问题啊。。