我正在开发一款游戏,其中会生成多个“音符”(精灵)。
随机创建笔记。它们中的每一个都具有随机速度,并在不同的线程中创建。 Notes类是sprite类的子类。它有2个属性和1个方法:
(由于隐私原因,我无法发布该类的代码)
我目前有一个静态类“NoteStack”,它最多可以容纳64个Notes对象的引用。
public class NoteStack {
public Notes[] note_array;
public int stack_len;
public NoteStack(){
note_array = new Notes[64];
stack_len = 0;
}
public void push(Notes n){
if(stack_len<64){
note_array[stack_len] = n;
stack_len++;
Gdx.app.log("push", "pushed");
}
}
public void delete_note(int pos){
if(note_array[pos] != null){
note_array[pos] = null;
for(int i = pos; i<stack_len; i++){
note_array[pos] = note_array[pos+1];
}
note_array[stack_len] = null;
stack_len = stack_len - 1;
}
}
}
这是我的“更新”功能的代码
public void update(float d, SpriteBatch b){
core.draw(b);
for(int i = 0; i< noteStack.stack_len; i++){
Gdx.app.log("update", "Update function running" + i);
noteStack.note_array[i].changePos(d);
noteStack.note_array[i].draw(b);
// scr_w - screen width , scr_h - screen height
if(noteStack.note_array[i].pos.x > scr_w || noteStack.note_array[i].pos.x < 0 || noteStack.note_array[i].pos.y > scr_h || noteStack.note_array[i].pos.y < 0){
noteStack.delete_note(i);
}
}
}
问题(如您所见)是每当NoteStack中的注释对象被删除(即调用delete_note方法)时,阵列中的其他Notes对象都会受到影响。
因此我的问题是:在LibGDX中引用多个精灵(音符)对象的最佳方法是什么?
答案 0 :(得分:0)
一般来说,在编程中,你永远不应该实现自己的经典&#34;数据结构,只有当它真的有必要并且你不能使用或扩展集合类型时,因为标准的实现经过了很好的编程和测试,因此使用起来更安全。
在你的情况下,我会使用libGDX Array。该类具有add,get,size方法,如果您真的想要,可以扩展Array类以获得更新函数。
但简而言之,如果您将public Notes[] note_array;
替换为public Array<Notes> note_array = new Array<>(true, 64);
并使用get
和remove
以及size
来迭代和管理应该有效的集合。