Libgdx。屏幕上的矩形位置与代码不同

时间:2017-06-04 15:44:50

标签: android libgdx

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

可能的原因:

bicho零宽度和高度。

如果您使用默认构造函数创建矩形,则需要设置该矩形的宽度和高度。

bicho = new Rectangle();
bicho.setSize(bichoImagen.getWidth(),bichoImagen.getHeight());