【问题标题】:Restart functions with click event使用点击事件重新启动函数
【发布时间】:2012-11-26 09:12:56
【问题描述】:

编辑*

在我的文字游戏中,我添加了一个重新启动按钮。目前的问题是,当我按下它时,它会回到开始屏幕,就像它应该的那样。但是当第二次点击开始按钮时,它会带回之前已经玩过的游戏。我现在已将所有代码放入单独的函数中,以便我可以再次为新游戏运行它们。问题是我不知道如何清除最后一场比赛才能重新开始。单击此按钮时如何重新启动所有功能?

我有功能..

createGrid()
startplay()
restartplay()
keyPress()
backGroundSound()
dragEvent()
nextQuestion()
closeMessage()
replaySound()
backGroundImage()

我在一个 document.ready 函数中运行它们

$(document).ready(function () {

backGroundSound();
createGrid();
keyPress();
backGroundImage();
playBackGroundSound();
dragEvent();

$('.next-question').on('click', function () {
    nextQuestion();
});
$('.close-message').one("click", function () {
    closeMessage();
});
$(".replay-sound").click(function () {
    replaySound();
});
//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/V4SYZ/

【问题讨论】:

  • 这和java有什么关系?请适当标记您的问题。
  • 你用 Java 标记了这个问题; Java and JavaScript are not the same thing.
  • restartplay() 是做什么的?它是否已经运行了其他一些功能?如果游戏和这些功能是按照我的方式设计的,那么您只需运行您在$.ready() 事件中开始运行的所有功能。如果是这种情况,我会通过将这一系列调用抽象为newGame() 函数并在$.ready().restart-btn 点击处理程序中调用它来保持干燥。我的猜测是restartplay() 已经做了这样的事情?
  • 不,它只是添加和删除必要的类@Useless Code
  • 我注意到您的代码中存在一些其他问题,语句 if (populationNumber >= 6) { 将始终评估为 falsepopulationNumber 是一个数组,在这种比较中将被强制转换为整数1。 1 将始终小于 6,因此该语句始终返回 false。您可能指的是if (populationNumber.length >= 6) {,这意味着“如果populationNumber 数组中有六个或更多项目”。涉及completionNumberif 语句也存在类似问题。

标签: javascript jquery


【解决方案1】:

您可能只需要清除存储上次游戏数据的任何数据结构。例如,如果它在一个数组中,则将其重置为一个带有data = [] 的空数组,或者如果在一个对象中为空对象data = {} 等。如果不了解代码的结构及其工作原理,很难更具体。

编辑

查看您在该小提琴中发布的代码,就在您在 $.ready() 事件中调用所有这些函数之前,您将一堆变量初始化为空数组;我没有仔细查看代码,但您可能需要再次执行此操作才能开始您的新游戏。

正如我之前建议的那样,我会将该代码移到一个新函数中:

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

    backGroundSound();
    createGrid();
    keyPress();
    backGroundImage();
    playBackGroundSound();
    dragEvent();
}

然后在$.ready()处理函数和.restart-btn的点击处理函数中调用newGame()函数:

$(document).ready(function () {

    newGame();

    $('.next-question').on('click', function () {
            nextQuestion();
    });
    $('.close-message').one("click", function () {
            closeMessage();
    });
    $(".replay-sound").click(function () {
            replaySound();
    });
    //Click event to start the game
    $(".start-btn-wrapper").click(function () {
            startplay();
    });

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

});

【讨论】:

  • 我可以用@Useless Code 中的 jquery 发送一个小提琴
  • 谢谢,我快到了。现在的问题是它再次启动了该功能,但旧的功能仍然存在。怎么清除旧的? @无用代码
  • 这里时间不早了,我明天再试试看。我没有看过任何操作 DOM 的代码,但我猜你需要重置一些 DOM 节点中的值,以便在开始新游戏时看到重置值。
  • 我该怎么做? @无用代码
  • 我已经尝试过这种方式,它仍然可以带回旧游戏以及新游戏。有什么想法可以清除旧的吗? @无用代码
【解决方案2】:

总是可以做一个非缓存的重新加载,像这样:

window.location.reload(true);

这告诉浏览器重新加载页面并明确使用它在内存中的任何内容(基本上,与 Windows 机器上的 Cntrl+F5 相同)。不过,这假设您不需要在当前“会话”中保留任何内容。

【讨论】:

  • 我需要更流畅的东西@Tieson T
  • 不只是刷新页面的东西。当按下重新启动按钮时,我会在返回开始屏幕时出现动画。当您重新加载时,这不会发生。我需要在按下重新启动按钮时清除功能,然后在按下开始按钮时重新启动功能@Tieson T
  • 所以你想再次调用前 6 个左右的方法吗?
  • 不,我想要 createGrid()、backgroundImage()、nextquestion()、closeMessage() 和 replaySound() @Tieson T
猜你喜欢
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多