在libgdx(Android)中引用多个(未知数量)sprite的最佳方法是什么?

时间:2016-02-15 17:36:26

标签: java android libgdx

我正在开发一款游戏,其中会生成多个“音符”(精灵)。

随机创建笔记。它们中的每一个都具有随机速度,并在不同的线程中创建。 Notes类是sprite类的子类。它有2个属性和1个方法:

  • vel - 一个Velocity2对象,将x和y分量保存在 注释对象的速度
  • pos - 一个Vector2对象,包含音符对象的x和y坐标。
  • changepos() - 一种根据物体的速度改变位置的方法

(由于隐私原因,我无法发布该类的代码)

我目前有一个静态类“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中引用多个精灵(音符)对象的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

一般来说,在编程中,你永远不应该实现自己的经典&#34;数据结构,只有当它真的有必要并且你不能使用或扩展集合类型时,因为标准的实现经过了很好的编程和测试,因此使用起来更安全。

在你的情况下,我会使用libGDX Array。该类具有add,get,size方法,如果您真的想要,可以扩展Array类以获得更新函数。

但简而言之,如果您将public Notes[] note_array;替换为public Array<Notes> note_array = new Array<>(true, 64);并使用getremove以及size来迭代和管理应该有效的集合。