1

私はJSとJQueryが初めてです。私はJQueryでGuitarHeroゲームのタイプを作成しようとしていますが、ノートがスムーズに落ちていません.私がやっていることは基本的setTimeout()にループで呼び出しています.もしそうなら)。コードは次のようになります。

while(counter < curSong.numNotes){
                // set the parameters sent to runCreateNote
        runCreateNote(counter, margin, entity, interval, name);
        counter++;
}

runCreateNote呼び出し時setTimeout()(範囲目的のため)

これはアニメーションコードです:

    noteBall.animate({
            top: (noteBall.parent().height() - noteBall.height()*2) + 'px'
        }, {
            duration: fallingtime,
            queue: false,
            easing: "linear",
            step: function() {
                checkStep(id);  
            },
            complete: function() {
                reachBottom(id);    
            }
    });

    function checkStep(id){

        var noteBall = $("#" + id);
        var name = id.substring(0,1);
        if (name == "R"){
            if (isInRange(noteBall)){
                isRedIn = true;
            } else {
                isRedIn = false;
            }
        }
        if (name == "B"){
            if (isInRange(noteBall)){
                isBlueIn = true;
            } else {
                isBlueIn = false;
            }
        }
        if (name == "G"){
            if (isInRange(noteBall)){
                isGreenIn = true;
            } else {
                isGreenIn = false;
            }
        }
        if (name = "O"){
            if (isInRange(noteBall)){
                isOrangeIn = true;
            } else {
                isOrangeIn = false;
            }
        }

}

コードのいずれかが関連しているかどうかはわかりませんが、アニメーションが重すぎないように見えることを示したかっただけです (スムーズに実行されると思います)。

いくつかの重要な原則がありませんか?

4

1 に答える 1

0

コードの残りの部分やアプリケーションのデモを見なくても、問題を引き起こしているのは次の行だと思います。

top: (noteBall.parent().height() - noteBall.height()*2) + 'px'

これらの値を事前に計算してキャッシュすることができれば、おそらくより良いでしょう。

また、ケースが相互に排他的であると仮定して、checkStep 内のすべての if ステートメントを取得し、それらを switch ステートメント (または少なくとも if/else) に移動することを検討する必要があります。

于 2011-12-03T20:06:30.713 に答える