我为entity.MyList
和外星人创建了一个数组,playerShots
是所有playerShots
的外星人,外星人是在屏幕顶部产生的所有外星人。< / p>
每个外星人和子弹周围都有一个碰撞圈。因为它们是在数组中,当我搜索是否发生碰撞时;它会说是真的,但我似乎无法指定删除特定碰撞的两个对象。我花了半个晚上试图找出一些没有运气的东西。
我曾尝试给每个外星人一个值,例如在1级。有10个外星人。因此它们产生的值从0到9。 然后我抓住我杀死的那个的值,并从数组中删除它(例如,杀死数字7,删除第7个索引)。但是我有另一种方法是用来将所有外星人的值(在索引被杀之后)下拉1;这是为了用索引大小来纠正外星人的值,但是在杀死一个外星人后它实际上不会扣除这些值,所以我会得到一个错误,因为程序最终会尝试删除一个没有的数组索引存在。我不确定为什么。这是我的代码:我已经删除了解决问题的可怕尝试。
playersShots
我认为这就是展示我遇到的问题所需的全部内容。正如你所知,我现在被迫使用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);
}
}
}
}
。这无济于事,因为无论我杀死哪个外星人,它都会删除(0)处的那个。
我会重新创建我希望成为我解决方案的方法,如果这可能会有所帮助,也许你可能知道我哪里出错了。
removeIndex(0)
以下是Alien.class
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);
}
}
}
编辑&gt;
public void takeFromCount(int value)
{
count -= value;
}
public int getCount()
{
return count;
}
答案 0 :(得分:0)
您是否尝试过方法removeValue()?
我想你可以解决你的问题。
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);
}
}