1

基本的なスペース インベーダー タイプのゲームが進行中ですが、プレイヤーからのショットがいつエイリアンに当たったかを認識できません。(Alien2 atm、左から 1 秒だけチェックしています)。どちらも動いているので、衝突をチェックする唯一の方法は、範囲ベースの if ステートメント (2 つの上部座標と 1 つの左側座標) を使用するか、Y 軸に沿った位置を Jquery で直接比較することであると判断しました。

現在、範囲ベースのソリューションを使用していますが、これまでのところ機能していません (理由は不明です)。

これまでの私のコード:

        if (key == "87"/*&& document.getElementById('BarrelOne').id=='BarrelOne'*/){
            var Invader2 = document.getElementById('Alien2');
            var Shot1 = document.getElementById('ShortShot');
            Shot1.style.webkitAnimationPlayState="running";
            setTimeout(function(){
                Shot1.style.webkitAnimationPlayState="paused";
            }, 1200);   

            if(document.elementFromPoint(625.5, 265.5) == Shot1){
                Invader2.style.visibility="hidden"; 
            }
        };

Jsfiddle:

http://jsfiddle.net/ZJxgT/2/

4

2 に答える 2

0

車輪の再発明に何時間も費やす代わりに、簡単な衝突検出を備えた Javascript 用の実際の 2D ゲーム エンジンに切り替えることをお勧めします (まだ可能であれば、期限に応じて) 。

同様に確認してください:Javascript用の2Dエンジン

于 2012-12-18T10:01:32.257 に答える
0

同様のことを行ったところ、gameQueryを使用する方がはるかに簡単であることがわかりました。

衝突をテストするには:

var collided = $("#div1").collision("#div2");

ここで完全な実例を見ることができます

編集

問題がある場合は、API を確認してください。たとえば、コリジョンの使用方法については、API のこの部分を確認してください。

collision次のように動作します。

このメソッドは、選択した要素と衝突する要素のリストを返しますが、パラメーターとして指定されたフィルターと一致する要素のみを返します。オプションの引数を 2 つ取ります (順序は重要ではありません)。フィルターは、衝突を検出するために使用される文字列フィルタリング要素であり、関数が衝突を検索する必要があるすべての要素を含む必要があります。たとえば、グループに含まれている可能性のあるクラス「foo」の要素との衝突を探す場合は、フィルター「.group,.foo」を使用します。

したがって、次のように記述します。

$("#ShortShot").collision("#Alien2").hide();
// will return the alien if it collides with ShortShot

または、両方を非表示にするには:

if (($("#ShortShot").collision("#Alien2")).length) {
    $("#ShortShot").remove();
    $("#Alien2").remove();
}
于 2012-12-18T10:01:43.823 に答える