AndEngine, плавно перемещайте Sprite с помощью акселерометра и PhysicsWorld - PullRequest
4 голосов
/ 25 января 2012

Используя AndEngine, я пытаюсь переместить спрайт (шар) с помощью акселерометра, который должен отскакивать от стен и сталкиваться с другими препятствиями.

На данный момент я нашел следующие два метода:

 public void onAccelerometerChanged(final AccelerometerData myAccelerometerData) {
    mySprite.setPosition(mySprite.getX() + myAccelerometerData.getX(), mySprite.getY() + myAccelerometerData.getY());

}

Это работает очень гладко, но только в мире, не связанном с физикой.(то есть не будет плавно отскакивать от стен и других препятствий).

И теперь, используя этот метод, который приведен в примерах, предоставленных AndEngine, мяч обладает хорошей физикой, но движется не так плавно, как хотелось бы.

 @Override
    public void onAccelerometerChanged(final AccelerometerData pAccelerometerData) {
            final Vector2 gravity = Vector2Pool.obtain(pAccelerometerData.getX(), pAccelerometerData.getY());
            this.mPhysicsWorld.setGravity(gravity);
            Vector2Pool.recycle(gravity);
    }

Я также пытался умножить pAccelerometerData на определенные значения, такие как 2 и 5, да, он выглядит более отзывчивым, но также заставляет мяч двигаться быстрее и труднее играть.

Чтобы прояснить мой вопрос, я бы хотел, чтобы моя игра была такой же гладкой, как шары в Лабиринте или отскок игры для Android.Шары в них более чувствительны к акселерометру.Например, если вы хотите внезапно остановить движущийся шар в Лабиринте, вы можете, но с помощью следующего кода в примере с двигателем, он некоторое время продолжает двигаться, как будто он движется в мире без трения.

Могу ли я сделать его более отзывчивым и плавным, как в игре Labyrinth?https://market.android.com/details?id=se.illusionlabs.labyrinth.lite&hl=en

1 Ответ

3 голосов
/ 25 января 2012

Вы можете (как вы пытались) умножить pAccelerometerData и добавить к мячу демпфирующий член. Таким образом, мяч будет более отзывчивым, остановится быстрее и будет сохранять разумную скорость.

Демпфирование является свойством тел. Так что это будет что-то вроде

body.setLinearDamping(1.5f);
...