libgdx - 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();
}
}
我删除了不必要的代码。这里有什么问题?
解决方案
如果您只是将某些东西绘制为一次性事件,那么它只会在 1/60 秒内可见。游戏在循环中一遍又一遍地重绘屏幕,因此要使某些内容出现并留在屏幕上,您需要设置一个成员 Boolean 来指示它应该被绘制,然后在您的渲染方法中绘制该项目,如果 Boolean是真的。
这是一个非常简单的解释。游戏往往有许多不同的项目来来去去,为每个项目保留单独的布尔值是不切实际的。所以通常你会有一个要绘制的项目列表,你可以根据游戏中的事件在列表中添加和删除项目。在您的渲染方法中,您将遍历列表并在其中绘制所有内容。
此外,您不能在new Texture
不保留对它的成员引用的情况下创建一个,以便以后可以dispose()
使用它。纹理使用 GPU 上的本机内存,必须处理掉,否则会泄漏内存。在 LibGDX 中,任何可能泄漏内存的对象都会实现Disposable
,并且必须在您丢失引用之前进行处理。
推荐阅读
- sql-server - MS SQL - 我应该用例还有其他方法吗?
- slack - Slack 使用 slack api 向 Slack 通道发送多条消息
- java - Twilio Android 聊天客户端函数“getSubscribedChannels()”返回不完整的频道
- xaml - 需要根据 Listview Xamarin Forms 中的行数绘制框视图
- java - 很确定我的循环过于复杂但不确定如何简化
- google-bigquery - 查询公共 BigQuery 数据集是否计入项目配额?
- git - Visual Studio 无法按预期处理嵌套子模块
- python - 如何在多个项目中使用自定义用户模型和对象权限(EX/django-guardian)实现 Django SSO
- r - 计算 R 中各列的唯一值
- php - 如何将php与html分离并再次分离php?