私は基本的なJavaゲームをプログラミングしていますが、問題があります。 私が試してみるたびに、10秒待ってもプログラムが正しく動作しなくなります。私はDrawable
というクラスを作りました。これはpaint
の機能を持っています。このpaint
関数は、コンストラクタで指定された特定の領域に矩形を描画します。 そして私はarraylist(ランダムに、別のスレッドで追加された)のすべてのdrawables上で反復するスレッドを持って、ちょうど彼らのx
に1を引く。正しく動作しなくなると、キャラクターはジャンプしてすべてのアニメーションを実行できますが、ドロワーブルは動かなくなります。最初に私はこれがConcurrentModificationException
エラーを与えたかもしれないと思ったが、それはコンソールにそれを印刷しなかった。 今私は本当に何をすべきか分かりません。 ここで私はDrawables
を追加します。私のJavaプログラムが予期せず正しく動作しなくなる
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
while (Game.isPlayingGame) {
try {
Thread.sleep((long) (Math.random()*2000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
obstacles.add(new Drawable(
Constants.WIDTH,
(int) (Constants.HEIGHT/2),
Constants.WIDTH - 100,
(int) (Constants.HEIGHT/2) - 100,
Color.BLUE));
}
}
});
t2.start();
私はDrawables
を移動:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (Game.isPlayingGame) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Drawable d : obstacles) {
d.x -= 1;
d.x2 -= 1;
if (d.x2 < 0) {
obstacles.remove(d);
}
}
}
}
});
t.start();
塗装方法:事前に
@Override
public void paint(Graphics g) {
super.paint(g);
floor.paint(g);
Graphics2D g2d = (Graphics2D) g;
AffineTransform ant = g2d.getTransform();
g2d.rotate(Math.toRadians(rotation),
character.x - Constants.characterSize/2,
character.y - Constants.characterSize/2);
character.paint(g);
g2d.setTransform(ant);
for (Drawable d : obstacles) {
d.paint(g);
System.out.println(rotation_down);
if (!rotation_down) {
if (!character.onCollision(floor)) {
character.y += (int) gravityAccel; // gravity
character.y2 += (int) gravityAccel; // gravity
gravityAccel += 0.1;
} else {
Screen.canJump = true;
gravityAccel = 0;
}
}
}
repaint();
}
感謝。
また、基本的に画面の大きさ( 'WIDTH'と' HEIGHT')を格納する 'Constants'クラスもあります。 – JHacking
ヒント:ここにたくさんのコードを投稿しています。これはマルチスレッドに関するものです。あまりにも多くの人があなたのコードの潜在的なバグを見つけるためにそれを実際にすべて読んでいないならば、驚かないでください。本質的には、これを** minimal **の例に減らすことができるかどうか試してみてください。最初のスターターとして。 **イベントディスパッチャスレッド**について読んでみたい。間違ったことをすると(例えば、UIが簡単にフリーズして反応しなくなるなど) – GhostCat
OK、最小化しようとします – JHacking