0

我正在设计一种游戏,其中有围绕六角形棋盘的团队基地。这个想法是,当一个团队基地被点击时,将轮到该团队。我有:

    $('.team').click(function(){
        var teamID=$(this).attr('id');
        explore(teamID);
    });

然后,我使用 teamID 来查找被点击的团队的索引,该索引存储为 json 文件中的对象,具有团队名称、得分等属性。

    function explore(index){         // the game portion
        var turn=file[index];        // finds the team's info from json file
        $('.hex').click(function(){  // when a hex is clicked.... play the game
            alert(turn.teamname);       
            // game elements 
    }

这总是第一次工作,但是如果我点击一个不同的团队框,然后点击一个十六进制,通常它认为这是我之前点击的框的轮到。我添加了 alert(turn.teamname) 来尝试调试。如果我单击不同的框,它总是会提醒第一个框,然后用不同的框发送第二个警报。我不明白为什么会有两个警报?所以它总是会提醒'team1',然后是'team1','team2'。当我单击更多框时,它会一直发出警报,直到它只提醒所有框。此外,如果我之前点击了两个以上的框,即使我一直点击相同的十六进制,它似乎也会在提醒我它是“team1”和“team2”之间交替出现。

这是我的第一篇 stackoverflow 帖子,所以我希望它有意义!谢谢!

4

2 回答 2

1

您得到这种行为的原因是您将事件处理程序添加到 dom 元素但从不删除它们。您需要更改处理六边形点击的方式。您可以使用http://api.jquery.com/one/向包含所有十六进制的父元素添加一次事件处理程序,并检查在事件处理程序中单击了哪个十六进制。或者您可以尝试一个更简单的解决方案,将事件侦听器添加到十六进制并检查是否有选定的团队:

var turn;
var teamSelected = false;
function explore(index){         // the game portion
    teamSelected = true;
    turn=file[index];        // finds the team's info from json file
}
$('.hex').click(function(){  // when a hex is clicked.... play the game
    if (teamSelected) {
        alert(turn.teamname);       
        // game elements 
        teamSelected = false;
    }
}
于 2013-07-18T19:28:45.393 回答
0

对于这样的事情,我建议进入流星。反应式编程模型比命令式编程模型干净得多(尤其是在它可以迅速变得复杂的游戏中)。

我觉得这个例子说明了使用这个框架可以非常快速地完成什么(最接近你的问题的例子)。

要深入了解,我建议查看介绍视频,然后继续阅读文档和有关它的最新书籍

于 2013-07-19T05:11:26.503 回答