Sup guys。このように、ゾンビは私が作ったクラスであり、私はArrayListの上でそれらを処理しています:Javaゲーム:ArrayListとIteratorとThread
私は、Javaクラス用の簡単なゾンビゲームを書いていると私は小さな問題で打ってる
horda.add(new Zumbi((int)(Math.random()* 750), 0));
ここで、引数は画面上のゾンビのスポーンの位置を表します。あなたがそれらをクリックする必要があり、それらを殺すために、非常に単純な、イテレータとの衝突をチェックし、ここに:
java.util.Iterator<Zumbi> itr = horda.iterator();
while (itr.hasNext()){
Zumbi z = itr.next();
if (tiroPos.x > z.zumbiPos.x &&
tiroPos.x < z.sprite.getWidth() + z.zumbiPos.x &&
tiroPos.y > z.zumbiPos.y &&
tiroPos.y < z.sprite.getHeight() + z.zumbiPos.y){
//things to do when it hits
}
tiroPosは、プレイヤーの撮影座標を保持しているポインタです。事は:時にはゾンビを打つときに起こるはずのことは起こっていない。 Iteratorが十分速く動作していないか、または他の何かが実行されていないことが原因であるかどうかはわかりません。
ゾンビごとに異なるスレッドを作っているかもしれませんが、それはコードを変更する基本的な方法であり、役に立たないとその時間をすべて失うことはありません。
だから、どんな考えですか?
//編集:忘れてしまったこと:他のメソッドでオブジェクトを描画する方法がわからず、ArrayListにアクセスしようとしたときにオーバーライドされたpaintメソッドの衝突をチェックしていますSync'd ArrayList)を別のスレッドで使用すると、共修飾の例外が発生しました。
// EDIT2: 問題は解決されました。
MouseListener
によって渡されたMouseEvent
オブジェクトは、マウスポインタの下端の座標を渡します。だから実際は衝突問題ではなく、より多くの数学問題でした。私はclickPoint.y
- 25を正しいものにするためにそれを比較しなければなりませんでした。
お手数をおかけしていただきありがとうございます。
クリックするたびにイテレータを最初にリセットしますか? –
実際に別のスレッドでユーザー入力を収集していますか? – Caspar
編集セクションをお読みください。これを忘れてしまった。 – Naro