当我触摸libgdx中的特定纹理时绘制纹理

时间:2014-06-16 11:35:56

标签: android eclipse libgdx textures render

我正在用libgdx制作游戏。如果我触摸屏幕然后出现纹理,但我真正想做的是当我触摸特定纹理时,必须出现其他纹理。 这是我现在的代码:

public class MyGame extends InputAdapter implements ApplicationListener {

    SpriteBatch batch;

    Texture ball;
    Texture bat;

    @Override
    public void create() {

        ball = new Texture("ball.png");
        bat = new Texture("bat.png");
        batch = new SpriteBatch();

    }

    @Override
    public void render() {

        batch.begin();
        if (Gdx.input.isTouched()) {
            batch.draw(ball, Gdx.input.getX(), Gdx.graphics.getHeight()
                    - Gdx.input.getY());
            batch.draw(bat, 50, 50);
            batch.end();

        }
    }
    }   

这不是整个代码,只是用于显示这些纹理的代码。

我非常感谢你的帮助。 三江源

1 个答案:

答案 0 :(得分:1)

下面的代码举例说明如果触摸在纹理区域内,您可以如何扩展当前的测试方法,但我不建议将它用于真实游戏。
作为一种理解正在发生的事情的练习是很好的,但是随着游戏变得更加复杂,以这种方式手动编码触摸区域将很快变得麻烦。
我强烈建议你熟悉libGdx中的scene2d包。该软件包具有处理所有常见2D行为的方法,例如触摸事件,移动和碰撞 像许多libGdx库一样,如果你刚开始的话,文档可能很难理解,并且没有很多教程。我建议您阅读dermetfan的Java Game Development (LibGDX)系列YouTube视频。当我开始时,它帮助我理解了很多方面。祝你好运。

SpriteBatch batch;

Texture firstTexture;
Texture secondTexture;

float firstTextureX;
float firstTextureY;
float secondTextureX;
float secondTextureY;

float touchX;
float touchY;

@Override
public void create() {

    firstTexture= new Texture("texture1.png");
    firstTextureX = 50;
    firstTextureY = 50;

    secondTexture = new Texture("texture2.png");
    secondTextureX = 250;
    secondTextureY = 250;

    batch = new SpriteBatch();

}

@Override
public void render() {

    batch.begin; // begin the batch

    // draw our first texture
    batch.draw(firstTexture, firstTextureX, firstTextureY);

    // is the screen touched?
    if (Gdx.input.isTouched()) {

        // is the touch within the area of our first texture?
        if (touchX > firstTextureX && touchX < (firstTextureX + firstTexture.getWidth())
                && touchY > firstTextureY && touchY < (firstTextureY + firstTexture.getHeight()) {
            // the touch is within our first texture so we draw our second texture
            batch.draw(secondTexture, secondTextureX, secondTextureY);
    }
    batch.end; // end the batch
}