У меня есть массив препятствий (Array
из Vector2
объектов), которые перемещаются с правой стороны экрана влево так в каждом вызове render()
функции я уменьшаю их рентгеновскую позицию по 400*deltaTime
значения, а затем Я рисую их, используя SpriteBatch
. Проблема в том, что они иногда перемещаются по левому краю на некоторые препятствия, поэтому кажется, что он движется вправо на какое-то время или останавливается, и я не знаю, почему. Таким образом, они двигаются влево, а некоторые препятствия останавливаются на некоторое время, после чего они снова двигаются правильно, а затем еще какое-то препятствие на некоторое время отстает, и это продолжается. В то же время на экране есть приблизительно 4 препятствия, и я перерабатываю препятствия, которые больше не видны. Может кто-нибудь объяснить мне, почему это происходит? Я заметил эту «ошибку» в примере libGDX Thrust Copter (который вы можете найти в книге LibGDX Game Development Essentials - Я тоже написал тему для этой проблемы: LibGDX example game Thrust Copter lags). Спасибо за любой ответ! :)LibGDX игра тормозит при рендеринге
public class TapToJumpGame extends ApplicationAdapter {
SpriteBatch batch;
Texture obstacle;
OrthographicCamera camera;
Array<Vector2> obstacles;
Array<Vector2> usedObstacles;
double obsTime;
Vector2 lastObstacle;
@Override
public void create() {
batch = new SpriteBatch();
usedObstacles = new Array<Vector2>();
obstacle = new Texture("obstacle.png");
camera = new OrthographicCamera();
camera.setToOrtho(false, 800, 480);
resetGame();
}
private void addObstacle()
{
if(lastObstacle != null) if((810 - (lastObstacle.x + obstacle.getWidth())) < 200) return;
Vector2 obs;
if(usedObstacles.size > 0) obs = usedObstacles.pop();
else obs = new Vector2();
obs.set(810, 10);
obstacles.add(obs);
lastObstacle = obs;
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
updateScene();
drawScene();
}
private void resetGame() {
obstacles = new Array<Vector2>();
obsTime = 1;
lastObstacle = null;
}
private void drawScene() {
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
for(Vector2 obs:obstacles)
{
batch.draw(obstacle, obs.x, obs.y);
}
batch.end();
}
private void updateScene() {
float deltaTime = Gdx.graphics.getDeltaTime();
obsTime -= deltaTime;
if(obsTime < 0)
{
obsTime = MathUtils.random()*1+.5;
addObstacle();
}
for(Vector2 obs:obstacles)
{
obs.x -= 400*deltaTime;
if(obs.x + obstacle.getWidth() < -10) {
usedObstacles.add(obs);
obstacles.removeValue(obs, true);
}
}
}
}
Вы можете поместить соответствующий код? Это поможет определить проблему – vdlmrc
Я ее отредактировал, поэтому добавил код. :) – Tinko