2016-05-23 2 views
0

Я пытаюсь заставить моего игрока двигаться от ускорения и скорости. Вот как можно найти скорость, и игрок перемещается:Программирование ускорения в Java

vel.x += acceleration.x; 
coordinates.x += vel.x; 

В coordinates управления, где игрок. Вот как рассчитывается ускорение:

if(moveRight && !(acceleration.x >= .1f)){ 
    acceleration.x += .1f * Gdx.graphics.getDeltaTime(); 
} 

Первый вопрос: ли это хороший способ, чтобы переместить игрока, если я буду использовать массу и силу для перемещения игрока.

Я также пытаюсь получить игрока, чтобы прийти к остановке, основанной от ускорения, здесь является расширенная версия приведенного выше кода, где я пытаюсь сделать это:

if(moveRight && !(acceleration.x >= .1f)){ 
    acceleration.x += .1f * Gdx.graphics.getDeltaTime(); 
}else if(!moveRight && (vel.x > 0)){ 
    acceleration.x -= .1f * Gdx.graphics.getDeltaTime(); 
} 

Однако это Безразлично» т работы. Когда я двигаюсь вперед, он ускоряется вперед, затем, когда я отпускаю, он останавливается, а затем стреляет назад.

Второй вопрос: Как я могу заставить вышеуказанный код работать так, как я хотел.

Спасибо за любую помощь в отношении этих нескольких вопросов.

+2

Я просто скажу это первым: '! (Acceleration.x> = .1f)' is _lot less_ readable, чем просто 'acceleration.x <.1f' IMHO. Второе: можете ли вы быть более конкретным, чем «не работает»? Как результат отличается от ожидаемого? – Arc676

+0

@ Arc676 Я отредактировал вопрос – Luke

+0

Что такое 'movementSpeed'? – Arc676

ответ

0

Посмотрите на это question about friction. Играя с коэффициентом трения, вы можете добиться приятного постепенного замедления движения. Стоит спросить, знаете ли вы о существующих физических механизмах для Java, которые могли бы сделать все это намного проще: JBox2d предназначен только для 2D, а JBullet - это порт двигателя 3D Bullet.

Смежные вопросы