2Dヘリコプターゲーム、廊下の壁を作成する方法は?


12

私は古典的な「ヘリコプター」ゲーム(つまりhttp://www.addictinggames.com/helicopter.html)の適応を検討していますが、壁生成エンジンの作成方法はまだわかりません。

擬似コードへのポインターはありますか?中間のオブジェクトにはあまり興味がありません。ゲームの進行に伴って難易度が増す(閉じる、予期しない曲線を持つ)方法で側面を生成する方法のみに興味があります。


1
また、明確にするために、壁はブロックよりも曲線である必要があります。実際には「水波」になるからです
...-davidkomer

1
単にブロックとして行いますが、その間はスムーズに補間します。
グスタボマシエル

回答:


17

そのために1D Perlinノイズを使用できます。これが2Dノイズの画像です。赤い線のあるサンプルを取り、それらに定数を掛けて緑の線を取得しました。

1Dセクションの2Dノイズ

値に掛ける定数は、ノイズの高さを決定します。そのため、簡単に難易度を上げることができます。Perlinノイズのもう1つの利点は、タイル化可能なノイズを生成できるため、無限に見えるレベルを構築できることです。

底面と天井を作成する場合は、通過できない領域を生成しないことが重要です。最も簡単な方法は、単純にノイズの「上部」部分を1.0 - noiseValue天井として使用し、下部に下部部分(noiseValue)を使用することです(もちろん、ある程度のオフセットがあります)。それがあまりにも鈍い場合は、2つの近いサンプルを検討することもできます。1つまたは2つのピクセルの上下にある別の赤いサンプルラインを想像してください。これにより、似たような、しかし同一ではない波が得られます。


うわー、これはとても助かりました!ありがとう:)私はFlash / Actionscriptで開発しています-組み込みのperlinNoise関数があります...それで遊んで、それがどうなるか見て
みましょう

@davidkomerこれが便利だとうれしいです。フラッシュでは、BitmapDataオブジェクトを作成し、そのperlinNoise機能を使用する必要があります。ビットマップは800x3ピクセルまたは極端なものである場合があり、単純に上下の行の値を抽出することができます(範囲内の(bitmap.getPixel(x,y) & 0xff) / 255.0値が得られるはず0..1です。
bummzack12年

うーん-私はそれを動作させましたが、定数/乗算器は値を通過できない領域にプッシュします...ここに私のコードがありますか?(vectはperlinノイズのラインからサンプリングされた32ビット値のベクトルです...したがって、y_valは青チャンネルにスケーラーを掛けただけです)for(idx = 0; idx <vect.length; idx ++){y_val =(vect [idx]&0xFF)*スケーラー。drawData.fillRect(new Rectangle(idx、drawData.height-y_val、1、y_val)、0x0000ff); drawData.fillRect(new Rectangle(idx、0、1、y_val)、0x0000ff); }
davidkomer

私はNOW-のために実行しなきゃ何かは、私はちょうどより慎重にあなたのコメントを読む必要が私に語っ;)私がでてる場所ですので、遠pastebin.com/1tmMtEAh
davidkomer

scalerですか?取得する値0..255は、コードの範囲内になります。
-bummzack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.