7 月 27 2008

Papervision3Dでレースゲーム制作 06 - グラベルの作成

Posted by tanjo at 4:46 PM

路面/路面外の判定を作ります。
地面判定をして、グラベル上(というかグリーンとサンドか)だったら動きが鈍くなるようにしてみます。味付けに画面も揺らしました。

判定方法はコースを量産しやすいこと、判定処理が軽いこと、の2つを優先します。そこで。

  1. 判定用のビットマップを作って Flash に読み込む
  2. ピクセル色情報をもとに巨大な2次元配列を作成
  3. 配列を参照して、今いる座標の路面判定をする

…という方法にしてみました。
判定用ビットマップは床テクスチャから簡単に作れるし、配列参照だけならどんなに大きくても負荷がかからないだろう、という狙い。メモリは浪費しちゃいますが。

今回は単純に、路面/路面外の2種類だけを作りました。ですので読み込むのは白黒2階調の画像。

ゲーム初期化処理の時に getPixel メソッドでピクセル色情報を取得して、配列を作成していきます。

groundData = new Array();
var groundBitmapData:BitmapData = new courseData01(0, 0);
for (var i:int = 0; i < 560; i++)
{
	groundData[i] = new Array();
	for (var j:int = 0; j < 420; j++)
	{
		if (groundBitmapData.getPixel(i, j) == 0xffffff)
		{
			groundData[i][j] = 1;
		}
		else if (groundBitmapData.getPixel(i, j) == 0x000000)
		{
			groundData[i][j] = 0;
		}
	}
}

メインループにて、座標情報をもとに配列を参照して地面情報を取得。

groundState = groundData[Math.floor(myPositionX / 5)][Math.floor(myPositionY / 5)];

あとはコース外だったら、加速度とかをコントロールして挙動制御すればOK。そして例のごとく 2D 処理で画面を揺らし、それっぽい演出をしておきます。速度の絶対値の累計をカウントすることで、揺れ方が移動距離に合うようにしています。でもこの辺はあまりにもひどいソースになっちゃってるんで詳しいことは割愛。。

レースゲーム・サンプル画面

デモをプレイする (要:Flash Player 9.0.115.0以降)

*ソースファイル Main.as の全文はこちらから参照できます。
(試行錯誤中のソースなんで怪しい行がいっぱいです。)

Leave a Reply