Я пытался изменить скорость физического тела, прикрепленного к прямоугольнику с перемещением акселерометра. Я не могу заставить тело изменять скорость, это постоянное свойство, когда оно установлено?Body Adjustable Velocity AndEngine/Box2D
это в моем populateScene:
rect = new Rectangle(220, -200, 24, 24, this.getVertexBufferObjectManager());
rect.setColor(Color.GREEN);
mScene.attachChild(rect);
ball = PhysicsFactory.createBoxBody(mPhysicsWorld, rect, BodyType.DynamicBody, droppingBoxDef);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(
rect, ball));
и это, где я пытаюсь изменить скорость:
@Override
public void onAccelerationChanged(AccelerationData pAccelerationData) {
int accellerometerSpeedX = (int)pAccelerationData.getX();
// accellerometerSpeedY = (int)pAccelerometerData.getY();
//Log.v("Accelerometer X Y Z: ", ""+pAccelerationData);
ball.setLinearVelocity(accellerometerSpeedX, 0);
}
Без второй части выше прямоугольника нагрузки хорошо и имеет физический организм работает правильно. Кажется, исчезает, когда я пытаюсь использовать: ball.setLinearVelocity.
Объект Body является глобальной переменной в классе, поэтому он может ссылаться на оба метода. Я попытался использовать обработчик обновления внутри Populationscene и установил ball.setLinearVelocity там, однако это дало те же результаты.
По существу Мой вопрос: Можно ли изменить скорость тела после того, как он подключен к физическому миру?
Не связывайтесь с physicsworld из другого потока, чем AndEngine UpdateThread! Я не могу вспомнить, из какой системы вызывается вызов обратного вызова акселерометра (UIThread, SensorThread?), Но это не AndEngine UpdateThread, и поэтому вы можете получить неожиданное поведение или сбой, если вы не отправляете этот вызов UpdateThread. –
Итак, что мне делать? Сохранить изменение акселерометра в глобальной переменной и использовать это значение в AndEngine UpdateThread? –
Это или 'runOnUpdateThread'. –