の配列を作成しました。はplayersShots
のすべてであり、エイリアンはすべて画面の上部にスポーンするエイリアンです。libGDX配列から特定の値を取り除く方法
各エイリアンと弾丸の周りに衝突円があります。それらは配列になっているので、衝突が発生したかどうかを検索すると、それは本当だと言うでしょうが、私は具体的に衝突した2つのオブジェクトを削除するよう指定することはできないようです。私は半日過ごして、何かを運のないものにしようとしました。
私は、各エイリアンにレベル1などの値を与えようとしました.10人のエイリアンがいます。したがって、0から9までの値が生成されます。 それから私は殺したものの価値をつかんで、それを配列から取り除くでしょう(例えば、数字7を殺し、7番目のインデックスを削除します)。しかし、別の方法では、エイリアスのすべての値を(インデックスが終了した後に)1つ下に引き下げるために使用していました。これはインデックスサイズでエイリアンの値を修正するためですが、エイリアンを殺した後に実際に値を差し引くことはないので、代わりにプログラムが最終的に配列のインデックスを削除しようとするのでエラーが発生します存在する。なぜ私は確信しています。ここに私のコードです:私はそれ以来、問題を解決するためにそのひどい試みを削除しました。
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)
を使用するように強制されていると言うことができます。それは、私が殺す異星人に関係なく、それを助けるものではありません。ただそれを(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.class
public void takeFromCount(int value)
{
count -= value;
}
public int getCount()
{
return count;
}
EDIT>
private Array<PlayerShot> playerShots = new Array<PlayerShot>();
private Array<Alien> aliens = new Array<Alien>();
'removeIndex(0);'私は、このメソッドがコレクション型にアタッチされていることに慣れていません。どのArrayを使用しましたか? –
私が読んでいるのは、libGDXを教える本の1つです。 –
申し訳ありませんが、私は改行するつもりだった...それはlibGDXでパッケージ化されています。それが役に立ったら、投稿にアレイをどのようにして追加したのかを追加します。 –