Как переместить спрайт, независимый от устройства, по оси X (libgdx)
У меня есть Sprite, который я рисую в методе рендеринга, я также устанавливаю положение (x и y) на экране во время рисования.
Метод рендеринга для меня выглядит следующим образом (не работает с try и catch ниже и не зависит от устройства):
@Override
public void render(float delta) {
game.batch.begin();
game.batch.draw(backgroundgame, 0, 0, Gdx.graphics.getWidth(),
Gdx.graphics.getHeight());
game.batch.draw(car.sprite, xcar,
(ycar));
game.batch.end();
/*try {
xcar++;
this.wait(50);
game.batch.end();
} catch (Exception e) {
e.printStackTrace();
}*/
}
В конструкторе класса я установил x и y позицию спрайта.
Мне было просто интересно, как я могу перемещать спрайт по оси X независимо от устройства? Могу ли я сделать это в методе рендеринга или мне нужен новый поток для спрайта?
Любая помощь высоко ценится!
1 ответ
Каждый кадр, если вы хотите переместить спрайт вдоль оси x, выполните:
sprite.setposition(lastx + 1*Gdx.graphics.getdeltatime(), some y)
lastx = sprite.getX()
И не делайте batch.draw(), вместо этого используйте sprite.draw (batch). Batch.draw использует спрайт как тупую текстуру без позиции. С sprite.draw, он делает все рисование позиции и размера для вас.
И нить в играх - плохая вещь. Никогда не используйте темы, если вам это абсолютно не нужно. IE загружает что-то
Все в играх делается каждый кадр (используя основной поток). Или же вы получаете проблемы с синхронизацией с другими потоками, и это становится беспорядком.
И именно поэтому вы получаете падение fps и отставание в играх, если ваше оборудование не может их запустить, потому что время обработки всех команд на кадр становится заметным.