gpt4 book ai didi

java - libGDX:如何从数组中删除特定值

转载 作者:行者123 更新时间:2023-12-01 09:30:36 24 4
gpt4 key购买 nike

我已经实例化了两个数组,一个用于玩家射弹,另一个用于敌人。

每个实体都有一个碰撞圈。当两个实体发生碰撞时,我想从它们所在的数组中删除这两个对象,但我在这方面遇到了一些麻烦。

我尝试过的一个解决方案是为每个实体赋予一个值,然后在删除它们时可以引用它们。

我会获取发生碰撞的实体的值,并将其从数组中删除,然后在敌人之前递减敌人的值;这是为了用新索引纠正这些值。然而,碰撞后它实际上不会减少,所以 ArrayIndexOutOfBoundsException相反,会发生异常。

private void didCollisionOccur() {
for (Alien alien : aliens) {
for (PlayerShot playerShot : playerShots) {
if (Intersector.overlaps(alien.getCircle(), playerShot.getCircle())) {
alien = aliens.removeIndex(0);
playerShot = playerShots.removeIndex(0);
}
}
}
}

我目前正在使用removeIndex(0)作为“解决方法”。这实际上并不是我想要的,因为它总是删除数组的第一个元素,而不是发生冲突的元素。

以下是我希望成为我的解决方案的方法。

private void didCollisionOccur() {
for (Alien alien : aliens) {
for (PlayerShot playerShot : playerShots) {
if(Intersector.overlaps(alien.getCircle(), playerShot.getCircle())) {
getCountHolder = alien.getCount();
alien = aliens.removeIndex(alien.getCount());
playerShot = playerShots.removeIndex(0);
}
}
}

for(Alien alien : aliens) {
if (alien.getCount() >= getCountHolder)
alien.takeFromCount(1);
}
}

以下内容位于Alien.java中:

public void takeFromCount(int value) {
count -= value;
}

public int getCount() {
return count;
}

最佳答案

您尝试过removeValue()方法吗?

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Array.html#removeValue-T-boolean-

我想你可以解决你的问题。

private void didCollisionOccur()
{
for(Alien alien : aliens)
{
for(PlayerShot playerShot : playerShots)
{
if(Intersector.overlaps(alien.getCircle(), playerShot.getCircle()))
{
aliens.removeValue(alien,true);
playerShots.removeValue(playerShot,true);
}
}
}
}

现在可能是java导致了当前修改异常。如果是这种情况,您需要在循环外部引用这两个对象,然后将其删除。

private void didCollisionOccur()
{
Alien tmpAlien = null;
PlayerShot tmpPlayerShot = null;
for(Alien alien : aliens)
{
for(PlayerShot playerShot : playerShots)
{
if(Intersector.overlaps(alien.getCircle(), playerShot.getCircle()))
{
tmpAlien = alien;
tmpPlayerShot = playerShot;
}
}
}
if(tmpAlien != null && tmpPlayerShot != null)
{
aliens.removeValue(tmpAlien,true);
playerShots.removeValue(tmpPlayerShot,true);
}
}

关于java - libGDX:如何从数组中删除特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39445164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com