1

在我的游戏中,我有一个 startGame() 函数,它初始化所有启动游戏的关键函数。一开始,你按下开始按钮带你进入游戏。游戏完成后会出现重启按钮。单击此按钮后,您将返回开始屏幕,即开始按钮所在的位置。

理想情况下,我希望此时能够第二次单击开始按钮,然后出现一个新游戏。问题是它带来了旧游戏。我曾尝试使用.empty, .queueand.dequeue和 reset ,但似乎没有任何效果。

单击重新启动按钮时如何重新启动所有功能?

$(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
});

您必须记住的另一件事是您正在创建很多隐含的全局变量,如果您要使用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 回答