0

編集**

私が作成しているゲームでは、ユーザーが現在の質問で問題を抱えている場合、次の質問ボタンを使用してグリッド内の他の質問に移動します。現時点では、プログラムがクラッシュし続け、コンソールエラーが発生しないため、実際に問題が発生しています。私が抱えていた最後の問題は、「再帰が多すぎる」と言われたことです。それ以来、私は問題を分類したと思っていましたが、いくつかのテストを行っただけで、毎回クラッシュします。

これはボタンのクリックイベントです...

//Next question click event
$('.next-question').bind("click", function() {
    $('td').removeClass('highlight-problem');
    shuffleEqually(listOfWords);
    shuffleEqually(nextWordIndexes);
    var rndWord = nextWordIndexes[Math.floor(Math.random())];
    var rndWord = nextWordIndexes[2];
    //Adds and removes nesesary classes
    $('td[data-word="' + listOfWords[rndWord].name + '"]').addClass('highlight-problem');
    $('td[data-word=' + word + ']').removeClass('wrong-letter').removeClass('wrong-word').removeClass('right-letter');
    var spellSpace = $('td[data-word="' + listOfWords[rndWord].name + '"]').hasClass('right-word');
    if (spellSpace) {
        $('.next-question').trigger('click');
    } else {
        $("#hintSound").attr('src', listOfWords[rndWord].audio);
        hintSound.play();
        $("#hintPic").attr('src', listOfWords[rndWord].pic);
        $('#hintPicTitle').attr('title', listOfWords[rndWord].hint);
    }
});

if文が関係しているのではないかと思いますが、これに変更してみました..

if (spellSpace == false) {

    $("#hintSound").attr('src', listOfWords[rndWord].audio);
    hintSound.play();
    $("#hintPic").attr('src', listOfWords[rndWord].pic);
    $('#hintPicTitle').attr('title', listOfWords[rndWord].hint);
}

そしてそれはそれをさらに悪化させます

均等にシャッフル:

//Shuffles words to randomize
shuffleEqually(nextWordIndexes);
var shuffledWords = [];
shuffledWords = chosenWords.sort(function () {
    return 0.5 - Math.random();
});

function shuffleEqually(a1, a2) {
    var arrays = [];
    if (typeof a1 === 'object' && a1.length > 0) {
        arrays.push(a1);
    }
    if (typeof a2 === 'object' && a2.length > 0) {
        arrays.push(a2);
    }
    var minLength = arrays[0].length;
    jQuery.each(arrays, function (i, a) {
        minLength = a.length < minLength ? a.length : minLength;
    });
    var randoms = [];
    for (i = 0; i < minLength; i++) {
        randoms.push(Math.random());
    }
    jQuery.each(arrays, function (i, a) {
        var i = minLength;
        while (i--) {
            var p = parseInt(randoms[i] * minLength);
            var t = a[i];
            a[i] = a[p];
            a[p] = t;
        }
    });
};

ヒント音:

var hintSound = $("#hintSound")[0];
4

1 に答える 1

3

あなたの問題は無限ループであり、単純明快です。

$('.next-question').bind("click", function() {
// binds click...
...


if (spellSpace) {
    $('.next-question').trigger('click');
    // triggers click ON THE SAME ELEMENT COLLECTION (same selector)

あなたはこれを改良したいと考えています。トリガーが次の質問で機能することを想定しているため、2 番目のステートメントを次のように変更することをお勧めします。

 $(".next-question").eq(($(".next-question").index($(this)) + 1) % $(".next-question").length).trigger("click");

shuffleEqually に 2 番目の無限ループがあります。

   jQuery.each(arrays, function (i, a) {
    var i = minLength;
    while (i--) {
        var p = parseInt(randoms[i] * minLength);
        var t = a[i];
        a[i] = a[p];
        a[p] = t;
    }

while 条件を制限値を持つように変更しないと、無限ループになります (デクリメント操作は常に成功するため)。

于 2012-11-19T09:04:25.203 に答える