Libgdx:在着陆时绘制精灵

Libgdx: Draw a Sprite on touchdown

我想在touchDown 事件发生时绘制一个Sprite,并在touchUp 事件发生时进行处理。我尝试了以下代码:

public class Connect4Screen implements Screen {
    SpriteBatch batch;
    Connect4Screen(){
    batch = new SpriteBatch();
    camera = new OrthographicCamera(30, 20);
    camera.update();
    batch.setProjectionMatrix(camera.combined);
    Gdx.input.setInputProcessor(new InputAdapter(){

        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
            drawChip();
        }
    }
    }
    public void drawChip(){
        batch.begin();
        batch.draw(new Texture("Images/yellow.png"), 0,  5, 1.4f,1.4f);
        batch.end();
    }
}

我删除了不必要的代码。 这里有什么问题?

如果你简单地画一些东西作为一次性事件,它只会在 1/60 秒内可见。游戏在循环中一遍又一遍地重绘屏幕,因此要使某些东西出现并停留在屏幕上,您需要设置一个成员布尔值来指示它应该被绘制,然后在您的渲染方法中绘制该项目,如果布尔值是真的。

这是一个非常简单的解释。游戏往往有许多不同的项目来来去去,为每个项目保留单独的布尔值是不切实际的。所以通常你会有一个要绘制的项目列表,你可以根据游戏中的事件从列表中添加和删除项目。在您的渲染方法中,您将遍历列表并绘制其中的所有内容。

此外,您不得在未保留成员引用的情况下创建 new Texture,以便稍后可以 dispose()。纹理使用 GPU 上的本机内存,必须处理掉,否则它们会泄漏内存。在 LibGDX 中,任何可能泄漏内存的对象都实现了 Disposable,并且必须在您失去对引用的跟踪之前进行处理。