【发布时间】:2017-03-26 13:59:12
【问题描述】:
我正在使用 libgdx,我有一个由我创建的球类数组列表。我正在尝试一次删除具有相同颜色的球。由于删除元素后数组中元素的位置发生了变化,这会留下一些元素未被删除。 所以我正在使用快照数组 https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/SnapshotArray.html
根据文档,如果我们在 array.begin() 和 array.end() 方法之间编写循环,则数组大小和索引不会改变。 所以我声明了快照数组
SnapshotArray<Ball> balls;
而我的删除方法是
private void removeVillianGroups(int color){
Ball[] ball=balls.begin();
for(int i=0;i<balls.size;i++){
if(balls.get(i).getColor()==color){
ball.removeValue(balls[i],true);
}
}
balls.end();
}
我在投射时遇到错误
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.mygames.haloween.Entity.Ball;
在上面这一行
Ball[] ball=balls.begin();
所以在这里我创建了我的数组,基本上我将屏幕宽度分成六个相等的部分,有 6 列球
private void createVillians() {
for (int color=0;color<4;color++)//create 4 diffirent color balls in 4 rows
for(int i=0;i<6;i++)//each row contan 6 same color balls
{
balls.add(new Ball(viewport,new Vector2(i*viewport.getWorldWidth()/6,
0-c*viewport.getWorldWidth()/6),color));
//Ball class just draw balls according their color between 0 to 3.
}
}
【问题讨论】:
-
@Am_I_Helpful 它返回一个
T[](即Ball[])。 @OP:你确定你没有使用原始类型吗?我们可以有更多的代码吗?此外,“由于删除元素后数组中元素的位置发生了变化” - 为什么不使用像Array或List这样的动态集合呢? -
如果您在 api 页面上看到示例,它使用 Object[] 作为原始类型,这让我认为这是历史实现,并且在之后的某个时间添加了“T[]”支持,在这种情况下,您可以如果它是针对此 api 的最新版本,则共享库版本?
-
我已经尝试过数组列表和延迟删除数组,由于删除迭代器跳过下一个元素后移动,因为它的位置现在是删除数组。在快照数组中,我的类型是定义类 Ball,它只绘制一个球精灵。看我的目标只是同时删除多个具有相同颜色的数组,我认为不需要更多代码,但如果需要我会发布
-
你能告诉我你的推特账号吗?我们可以做朋友吗?