首页 > 解决方案 > Libgdx:在触地得分时绘制 Sprite

问题描述

我想在 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();
    }
}

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

标签: libgdxrendering

解决方案


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

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

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


推荐阅读