Java libgdx setUserObject()未设置对象

Java libgdx setUserObject()未设置对象,java,libgdx,Java,Libgdx,我需要使用快照数组,这样我可以按照正确的顺序渲染我的演员。排序应该是距离中心的绝对距离,不过我希望稍后在渲染过程中保留签名,以确定它是放在中心的左侧还是右侧。我为第一个for循环中的每个参与者确定了距离中心的距离,并尝试使用setUserObject()。当我后来试图在排序比较器中检索时,我被告知它是一个空值 SnapshotArray<Actor> children = getChildren(); children.begin(); int n = childre

我需要使用快照数组,这样我可以按照正确的顺序渲染我的演员。排序应该是距离中心的绝对距离,不过我希望稍后在渲染过程中保留签名,以确定它是放在中心的左侧还是右侧。我为第一个for循环中的每个参与者确定了距离中心的距离,并尝试使用setUserObject()。当我后来试图在排序比较器中检索时,我被告知它是一个空值

SnapshotArray<Actor> children = getChildren();
    children.begin();
    int n = children.size;
    
    for (int i = getIndexOfFocus() + 1; i < n; i++) {
        Actor child = children.get(i);
        int offset = i - Math.round(getIndexOfFocus());
        child.setUserObject(Integer.valueOf(offset));
    }
    //Arrays.sort(<SnapShotArray>children, 0, n, new MyElementComparator());
    children.sort(new MyElementComparator());  

您仅在数组的子集上设置用户对象。for循环中的
i
不是从0.Arg开始的!我对错过这个充满了自我厌恶。幸运的是,有一个工作程序是多么的酷,这就平衡了这一点。您只需在数组的子集上设置用户对象。for循环中的
i
不是从0.Arg开始的!我对错过这个充满了自我厌恶。幸运的是,有一个工作程序是多么的酷,这就平衡了这一点。
private static class MyElementComparator implements Comparator<Actor>{
       public int compare (Actor a1, Actor a2){
           Integer e1 = (Integer) a1.getUserObject();
           Integer e2 = (Integer) a2.getUserObject();
           System.out.println("1(" + a1 + ", " + e1 + "), 2(" + a2 + ", " + e2 + ")");
           int r = 0;
           if (Math.abs(e1) < Math.abs(e2)) r = -1;
           if (Math.abs(e1) == Math.abs(e2)) r = 0;
           if (Math.abs(e1) > Math.abs(e2)) r = 1;
           return r;
       }
    }
    1(TextButton: index_1, null), 2(TextButton: index_0, null)