[英]Best way to reference multiple (unknown number of) sprites in libgdx (Android)?
我在一个会产生多个“音符”(子画面)的游戏上工作。
注释是随机创建的。 它们中的每一个都具有随机速度,并在不同的线程中创建。 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中删除一个note对象(即,调用delete_note方法)时,数组中的其他Notes对象都会受到影响。
因此,我的问题是:在LibGDX中引用多个Sprite(注释)对象的最佳方法是什么?
一般来说,在编程中,永远不要实现自己的“经典”数据结构,除非确实有必要,并且不能使用或扩展集合类型,因为标准实现已进行了很好的编程和测试,因此使用起来更安全。
在您的情况下,我将使用libGDX Array 。 该类具有add,get,size方法,如果确实需要,可以扩展Array类以具有更新功能。
但简而言之,如果您替换public Notes[] note_array;
使用public Array<Notes> note_array = new Array<>(true, 64);
并使用get
和remove
以及size
来迭代和管理应该起作用的集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.