首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提示和等待响应

提示和等待响应
EN

Stack Overflow用户
提问于 2014-03-27 03:05:53
回答 1查看 49关注 0票数 0

我在网上到处搜索,但没能解决这个问题。

我在编码一个游戏。在游戏开始之前,我提示用户难度,用户必须通过单击其中一个按钮来选择一个难度来启动游戏。

代码语言:javascript
运行
复制
function GameManager(){
    this.current = 0;
    this.difficulty = 0;
    this.toolbox = new Toolbox();
    this.promptDifficulty();            // Here it should wait for user input
    this.grid = new Grid(this.difficulty);
    this.start();
}

GameManager.prototype.promptDifficulty = function() {
    $("#difficulty").show();
    this.toolbox.center();
    var selected = false;
    $('.selection').click(function(){
        var $diff = $(this).attr('id');
        if($diff === 'easy')
            this.difficulty = 8;
        else if($diff === 'medium')
            this.difficulty = 9;
        else if($diff === 'hard')
            this.difficulty = 10;
        $('#difficulty').hide();
    });
}; 

然而,它在用户选择困难之前就创建了网格,这给整个设计带来了混乱。如何让它等到用户单击其中一个困难设置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 03:09:23

问题是困难提示是一个异步方法,当您调用promptDifficulty()方法时,它会显示困难选择器,但是脚本执行的其余部分将在用户选择项目之前继续执行。因此,您需要使用回调来继续,一旦用户选择一个项,就会调用这个回调。

代码语言:javascript
运行
复制
function GameManager() {
    this.current = 0;
    this.difficulty = 0;
    this.toolbox = new Toolbox();
    this.promptDifficulty($.proxy(function (difficulty) {
        this.grid = new Grid(this.difficulty);
        this.start();
    }, this));
}

GameManager.prototype.promptDifficulty = function (callback) {
    $("#difficulty").show();
    this.toolbox.center();
    var selected = false;
    $('.selection').click($.proxy(function (e) {
        var $diff = e.currentTarget.id;

        if ($diff === 'easy') this.difficulty = 8;
        else if ($diff === 'medium') this.difficulty = 9;
        else if ($diff === 'hard') this.difficulty = 10;
        $('#difficulty').hide();

        callback(this.difficulty);
    }, this));
};

还请注意$.proxy()的使用,因为在单击处理程序中,默认情况下this指的是单击元素,因此当您设置this.difficulty时,它不会设置为GameManager实例,您可以通过传递回调方法的自定义执行上下文来解决问题。

演示:小提琴

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22677482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档