我正在尝试使用libgdx为Android开发一个非常简单的游戏:屏幕上随机出现一个错误,你必须触摸它才能杀死它。如果你这样做,游戏会继续,直到你错过三次,然后游戏结束。很简单。
所以,我看到了这个错误,我在中间触摸它,但我想念:错误矩形中没有包含触摸点,这与我在屏幕上看到的不同。我打印出矩形和点的坐标,我看到矩形的那些是正确的几个deltaTimes之前,但不再是,尽管我在屏幕上看到的。我已经到处寻找解决方案,阅读教程,libgdx文档,但我不明白,我已经疯了。
这是构造函数
上的touchDown事件的代码Gdx.input.setInputProcessor(new InputAdapter(){
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
unidadTiempo = unidadTiempo - aceleracion;
toque.set(screenX, screenY, 0f);
camara.unproject(toque);
if (bicho.contains(toque.x, toque.y)) {
aplastamiento.play();
bichosLiquidados++;
} else {
burla.play();
vidas--;
}
return true;
}
});
这是绘制错误并加快bug出现速度的方法
void apareceBicho(){
ultimoBicho = TimeUtils.nanoTime();
juego.letra.draw(juego.batch, "Puntuacion: " + bichosLiquidados, 0, altoPantalla);
bicho.setX(xAleatorio);
bicho.setY(yAleatorio);
juego.batch.draw(bichoImagen, bicho.x, bicho.y);
while (TimeUtils.nanoTime() - ultimoBicho < unidadTiempo && vidas > 0){
unidadTiempo = unidadTiempo - aceleracion;
xAleatorio = MathUtils.random(randomx);
yAleatorio = MathUtils.random(randomy);
}
if(vidas == 0){
risa.play();
TextureRegion fotogramActual = animacionFinal.getKeyFrame(stateTime, true);
juego.batch.draw(fotogramActual, bicho.x, bicho.y);
juego.batch.flush();
gameover = true;
}
if (gameover){
juego.setScreen(new PantallaFinal(juego, this));
}
}
最后,渲染方法
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0.2f, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stateTime += Gdx.graphics.getDeltaTime();
camara.update();
juego.batch.setProjectionMatrix(camara.combined);
juego.batch.begin();
juego.batch.draw(yerbita, 0, 0, anchoPantalla, altoPantalla);
apareceBicho();
juego.batch.end();
}
这就是我在几个deltaTimes之前的意思:
06-04 09:30:05.942 RECTANGLE POSITION AIMED TO :Posicion del bicho:612.88776,200.9191,133.0,126.0
06-04 09:30:07.950实际矩形位置:Posicion del bicho:426.92572,111.10537,133.0,126.0
06-04 09:30:09.946 接触位置:Coordenadas toque = 659.2,250.3111
答案 0 :(得分:0)
可能的原因:
bicho
零宽度和高度。
如果您使用默认构造函数创建矩形,则需要设置该矩形的宽度和高度。
bicho = new Rectangle();
bicho.setSize(bichoImagen.getWidth(),bichoImagen.getHeight());