7 月 27 2008
Papervision3Dでレースゲーム制作 06 - グラベルの作成
路面/路面外の判定を作ります。
地面判定をして、グラベル上(というかグリーンとサンドか)だったら動きが鈍くなるようにしてみます。味付けに画面も揺らしました。
判定方法はコースを量産しやすいこと、判定処理が軽いこと、の2つを優先します。そこで。
- 判定用のビットマップを作って Flash に読み込む
- ピクセル色情報をもとに巨大な2次元配列を作成
- 配列を参照して、今いる座標の路面判定をする
…という方法にしてみました。
判定用ビットマップは床テクスチャから簡単に作れるし、配列参照だけならどんなに大きくても負荷がかからないだろう、という狙い。メモリは浪費しちゃいますが。
今回は単純に、路面/路面外の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 の全文はこちらから参照できます。
(試行錯誤中のソースなんで怪しい行がいっぱいです。)

