1 回答

TA贡献1856条经验 获得超11个赞
我正在阅读字里行间,但看起来您必须在 Bullet/Target/Explosion 的构造函数中加载纹理,因为我没有看到您将纹理或纹理区域引用传递给它们的构造函数或方法render。
您应该在单个类中加载所有纹理,并传递对游戏对象的引用,以便它们“借用”和绘制。否则,您将无缘无故地加载相同图像的许多副本。
此外,纹理是一次性的,这意味着它使用本机内存,并且必须dispose()在让垃圾收集器获取它之前调用它。否则,本机内存就会泄漏。
在你的例子中,所有这些子弹、目标和爆炸都会一遍又一遍地加载许多纹理,并且当你删除它们时永远不会处理它们。
关于您关于 SpriteBatch 的问题。是的,您应该在实例化它的同一个类中处理它,并且dispose()这是执行此操作的正确位置。
编辑,准系统示例:
public class Assets implements Disposable {
public final Texture horse;
public final Texture bullet;
// etc.
public Assets (){
horse = new Texture("horse.png");
//...
}
public void dispose(){
horse.dispose();
//...
}
}
public class Zero implements Screen, InputProcessor {
private final Assets assets;
//...
public Zero (){
assets = new Assets();
//...
}
//...
public void dispose(){
assets.dispose();
//...
}
}
public class Bullet {
//...
public void render(SpriteBatch batch, Assets assets){
batch.render(assets.bullet, /*...*/);
}
}
添加回答
举报