私は Java には少し慣れていませんが、他のプログラミング言語では多くの経験があります。現在、単純な「焦土」スタイルのゲームを作成しようとしていますが、風景を表示するのに問題があります。地形を表すために 2 次元の高さフィールドを使用しています。私の init メソッドでは、いくつかの sin 関数と乱数を使用して地形を生成します。このテクニックは、オンラインのチュートリアルで見つけました。
float flat, peak;
flat = 70; peak = 50;
int rand1, rand2, rand3;
rand1 = gen.nextInt() % 4 + 1;
rand2 = gen.nextInt() % 4 + 1;
rand3 = gen.nextInt() % 4 + 1;
for (int a=0; a<750; a++) {
double height = peak / rand1 * Math.sin((double)a / flat * rand1 + rand1);
height += peak / rand2 * Math.sin((double)a / flat * rand2 + rand2);
height += peak / rand3 * Math.sin((double)a / flat * rand3 + rand3);
height += 250;
heights[a] = (int)height;
}
次に、このpaint()
方法で地形を描画します。高さは、画面の下部からのピクセル数 (長さ 750 ピクセル、高さ 500 ピクセル) で表されます。
public void paint(Graphics g)
{
g.setColor(Color.green);
for (int a=0; a<750; a++) {
g.fillRect(a, 500-heights[a], 1, heights[a]);
}
}
ただし、地形を表示するのに大きな問題があります。約半分の時間で表示され、見栄えがよく、ランダムに見えます。それ以外の場合は、init メソッドが呼び出されなかったかのように、まったく表示されず、heights[] 配列のすべての値がすべてゼロに設定されます。誰が何が起こっているのか知っていますか?