1 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
我正在閱讀字里行間,但看起來(lái)您必須在 Bullet/Target/Explosion 的構(gòu)造函數(shù)中加載紋理,因?yàn)槲覜](méi)有看到您將紋理或紋理區(qū)域引用傳遞給它們的構(gòu)造函數(shù)或方法render。
您應(yīng)該在單個(gè)類中加載所有紋理,并傳遞對(duì)游戲?qū)ο蟮囊?,以便它們“借用”和繪制。否則,您將無(wú)緣無(wú)故地加載相同圖像的許多副本。
此外,紋理是一次性的,這意味著它使用本機(jī)內(nèi)存,并且必須dispose()在讓垃圾收集器獲取它之前調(diào)用它。否則,本機(jī)內(nèi)存就會(huì)泄漏。
在你的例子中,所有這些子彈、目標(biāo)和爆炸都會(huì)一遍又一遍地加載許多紋理,并且當(dāng)你刪除它們時(shí)永遠(yuǎn)不會(huì)處理它們。
關(guān)于您關(guān)于 SpriteBatch 的問(wèn)題。是的,您應(yīng)該在實(shí)例化它的同一個(gè)類中處理它,并且dispose()這是執(zhí)行此操作的正確位置。
編輯,準(zhǔn)系統(tǒng)示例:
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, /*...*/);
}
}
添加回答
舉報(bào)