繁体   English   中英

在libgdx(Android)中引用多个(未知数量)精灵的最佳方法?

[英]Best way to reference multiple (unknown number of) sprites in libgdx (Android)?

我在一个会产生多个“音符”(子画面)的游戏上工作。

注释是随机创建的。 它们中的每一个都具有随机速度,并在不同的线程中创建。 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中删除一个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); 并使用getremove以及size来迭代和管理应该起作用的集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM