1

私のゲームには、ゲームを開始するすべての主要な関数を初期化する startGame() 関数があります。最初に、スタートボタンを押してゲームに入ります。ゲームが完了すると、再起動ボタンが表示されます。これをクリックすると、スタートボタンのあるスタート画面に戻ります。

理想的には、この時点でスタート ボタンを 2 回クリックして、新しいゲームが表示されるようにしたいと考えています。問題は、それが古いゲームを持ち出すことです。.empty.queueおよび.dequeueリセットを使用しようとしましたが、何も機能しないようです。

再起動ボタンをクリックしたときにすべての機能を再起動するにはどうすればよいですか?

$(document).ready(function () {

successSound = $("#successSound")[0];
failSound = $("#failSound")[0];
moveSound = $("#moveSound")[0];
hitSound = $("#hitSound")[0];
missSound = $("#missSound")[0];
hintSound = $("#hintSound")[0];
hintPic = $("#hintPic")[0];
hintPicTitle = $("#hintPicTitle")[0];
bgMusic = $('#audio-bg')[0];

newGame();

//Click event to start the game
$(".start-btn-wrapper").click(function () {
    startplay();

});
//Click event to restart the game
$(".restart-btn").click(function () {
    restartplay();
});   

スクリプトをいじる: http://jsfiddle.net/rVaFs/

4

3 に答える 3

2

グローバルの使用をやめると、はるかに簡単になります: var を前に付けないものすべて (関数を含む)。startplay が初期の DOM 状態に依存し、コードを書き直すのが難しすぎる (または時間がかかりすぎる) 場合は、ゲームを開始する前に DOM のその部分のコピーを作成し、終了時に削除することができます。

于 2012-11-26T12:45:09.070 に答える
1

コールバック関数に名前を付けることで、コールバックを使用してすべてを元の状態にリセットできます。document.ready

$(document).ready(function reset()
{
    //your code here
    //note, you must ensure event handlers are unbound:
    $('#reset').unbind('click').bind('click',reset);//<-- call main callback
});

もう 1 つ覚えておかなければならないことは、コールバックを使用すると問題が発生する可能性がある暗黙のグローバルを多数作成していることです。readyこれに対処するには、次の行を に変更してsuccessSound = $("#successSound")[0];くださいvar successSound = $("#successSound")[0];

于 2012-11-26T12:41:37.290 に答える
0

という関数を作成resetGame()し、DOM をクリアしました。

function resetGame() {
    $(document).ready();
    $('.table-container').empty();
    $('.reveal-wrapper').empty();
    $('.helper').removeClass('inactive');
    $('.tiles-wrapper').removeClass('active');
    $('.hint-container').removeClass('active');
    $('td').addClass('highlight-problem');
    $('.game').removeClass("active").removeClass('game-over').addClass('standby').addClass('transition');
    $('.score').html("");
    $(".next-question").removeClass('move-down');
    $('.reveal-wrapper').removeClass('image' + randomNumber);
    $(bgMusic).unbind();
    score.right = 0;
    score.wrong = 0;
}

function newGame() {
    randomWord = [];
    listOfWords = [];
    attemptNumber = [];
    completionNumber = [];
    populationNumber = [];
    gridSize = [];

    createGrid();
    backGroundImage();
    dragEvent();
    nextQuestion();
    closeMessage();
    replaySound();

    $('.score').html("0/" + completionNumber);
    $('.game').removeClass("standby").addClass('active').addClass('transition');

    $(bgMusic).on('timeupdate', function () {
        var vol = 1,
            interval = 250;
        if (bgMusic.volume == 1) {
            var intervalID = setInterval(function () {
                if (vol > 0) {
                    vol -= 0.05;
                    bgMusic.volume = vol.toFixed(2);
                } else {
                    clearInterval(intervalID);
                }
            }, interval);
        }
    });
}

$(document).ready(function () {
    successSound = $("#successSound")[0];
    failSound = $("#failSound")[0];
    moveSound = $("#moveSound")[0];
    hitSound = $("#hitSound")[0];
    missSound = $("#missSound")[0];
    hintSound = $("#hintSound")[0];
    hintPic = $("#hintPic")[0];
    hintPicTitle = $("#hintPicTitle")[0];
    bgMusic = $('#audio-bg')[0];

    backGroundSound();
    playBackGroundSound();
    keyPress();

    $(".start-btn-wrapper").click(function () {
        newGame();
    });
    $(".restart-btn").click(function () {
        resetGame();
    });
});

次に、restart-btnクリックイベントで呼び出しました。

于 2012-11-27T13:06:22.367 に答える