html5 キャンバスを使用して JavaScript で小さなゲームを作成しましたが、衝突検出の時点でかなり混乱しています。
レベルをタイルで構築し、保存した JSON ファイルをゲームにインポートします。
私のレベル描画機能では、レイヤー プロパティがあるかどうか、およびレイヤー プロパティが衝突しているかどうかを確認するチェックがあります。存在する場合、そのレイヤーが返され、ループが続行されます。終了すると、衝突で返されたレイヤーが別のループに入れられ、タイル値を配列に入れることができます。
したがって、この配列には、レイヤーにあるタイルの行数に応じて一連の配列があり、これらの行には各タイルのその行のデータが保持されます。
私がやりたいことは、プレイヤー x/y が 0 に等しくないタイルの 1 つにあり、衝突することです。
そのタイル スペースにある値しか持っていない場合、どうすればよいでしょうか?
タイルがどのように保存されているかを自分で確認できるように、ゲームのライブ バージョンへのリンクを次に示します。ログインするには
- ユーザー名 - ゲスト
- パスワード - ゲスト
私の質問を明確にするために: プレーヤーの x/y とタイル値の間に衝突を作成するにはどうすればよいですか?? どうもありがとう
アップデート
わかりましたので、私はほぼそこにいると思います。現時点での問題は、オブジェクト x と y を配列から読み取り、衝突をチェックする方法です。現時点では、衝突検出は配列内の最後のタイルで動作します (画面の右下)、配列を通過するために実装したコードは次のとおりです。
this.check_coll = function(array,posX, posY){
var collided = false,
block_x,
block_y,
block_cx,
block_cy,
combined_hw = 32,
combined_hh = 32,
player_cx = posX+(32/2),
player_cy = posY+(32/2);
array.forEach(function(value,i){
//get obj x
block_x = value[1];
//get obj y
block_y = value[2];
block_cx = block_x+(32/2);
block_cy = block_y+(32/2);
collided = Math.abs(player_cx - block_cx)< combined_hw
&& Math.abs(player_cy - block_cy)< combined_hh;
});
return collided;
}
アイデアはありますか??