Я наткнулся на эту публикацию, столкнувшись с той же проблемой, и хотя ответ лордрейдеров помог мне встать на правильный путь, я нашел лучшее решение и решил опубликовать его здесь. Решение не требует уничтожения / воссоздания каких-либо тел. Просто сделайте следующее:
if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN){
physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setActive(false);
}
if(pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP){
physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setActive(true);
}
Таким образом, вы просто устанавливаете / выключаете активное состояние объектов и можете свободно перемещать объект без физических сил, сражающихся с действием перетаскивания. Вы также можете сбросить / сбросить все текущие силы, приложенные к объекту, в противном случае, когда вы уроните объект, он возобновит действие, в котором он ранее участвовал. Например, если вы подняли мяч, катящийся по склону, когда вы отпустите это, он начал бы двигаться, как будто спускаясь с холма, потому что эти силы были сохранены в состоянии объекта, когда вы отключили физическое тело. Вы можете сделать это так:
physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setAngularVelocity(0);
physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(self).getBody().setLinearVelocity(0, 0);