Javascript鼠标跟踪变量未从false切换到true

Javascript鼠标跟踪变量未从false切换到true,javascript,Javascript,作为我高级项目的一部分,我正在制作一个非常简单的游戏演示。在这个项目中,我试图制作一个基本的匹配游戏,帮助教授一些基本的数学技能。我希望玩家能够翻转卡片来检查它们是否有正确的答案,但是,我用来跟踪鼠标是否被点击的变量似乎从来没有注册为true var isMouseDown = false; c.onmousedown = function(evt) { isMouseDown = true; }; c.onmouseup = function(evt) { isMouseDown = fa

作为我高级项目的一部分,我正在制作一个非常简单的游戏演示。在这个项目中,我试图制作一个基本的匹配游戏,帮助教授一些基本的数学技能。我希望玩家能够翻转卡片来检查它们是否有正确的答案,但是,我用来跟踪鼠标是否被点击的变量似乎从来没有注册为true

var isMouseDown = false;
c.onmousedown = 
function(evt) { isMouseDown = true; };
c.onmouseup = 
function(evt) { isMouseDown = false; };

// Keep track of where the mouse is
var mouse = {x: 0, y: 0};
c.onmousemove = 
function(evt) {
    mouse.x = evt.clientX;
    mouse.y = evt.clientY;
};
这就是我使用变量的地方:

this.clicked = function() {
    c.strokeRect(500, 500, 20, 20);
    if (isMouseDown) {
        c.strokeRect(400, 400, 20, 20);
        var diffX = mouse.x - this.x;
        var diffY = mouse.y - this.y;
        if (0 <= diffX <= 40) {
            var xInRange = true;
        } else {
            xInRange = false;
        }
        if (0<= diffY <= 60) {
            var yInRange = true;
            c.strokeRect(this.x + 10, this.y + 25, 20, 20);
        } else {
            yInRange = false;
        }
        if (xInRange && yInRange) {
            this.flip();
        }
    }
};
我在Javascript方面没有太多的经验,尽管我在大二的时候为AP计算机科学做了大量的Java工作。如果你想知道的话,是的,我咬的比我在这里能咀嚼的多一点:P


有人能告诉我这里可能出了什么问题吗?谢谢

似乎您正在尝试将
鼠标事件添加到上下文
c
。而是将其添加到实际的
画布
元素。

这可能是一个范围问题。如果没有所有这些如何表达的概述,很难说。我将使用调试器并逐步完成您单击的
函数。很可能其中一个值不是您期望的值。如何调用单击的
函数?或者应该是一个事件处理程序。在这种情况下,它不应该是this.onclick=function.
?它的命名意味着它是在单击完成后触发的,在某些上下文中,这意味着在
mouseup
也发生之后。变量“c”是什么?“c”是画布。我可以试着让它成为一个事件处理程序,看看它是如何工作的。。。目前,我在另一个功能中调用它来更新游戏。我会更新我的帖子,包括这一点。我已经尝试过单步执行该函数,但不幸的是,我使用的编译器(内置于记事本++)中的编译器)只能做到这一点。这就是为什么我加入了c.strokeRect,以确定问题的确切位置。有人对我可以使用的更复杂的调试器有什么建议吗?感谢所有的反馈(顺便说一句:)
    var cmTID;
    var timeStep = 50; //milliseconds
    var numCards = 10;
    function update() {
        var card = new Card(10, 10, 60, 40, 5);
        card.draw();
        card.clicked();//nothing after this compiles atm
        c.strokeRect(200, 200, 30, 30);
        clearTimeout(cmTID);
        cmTID = setTimeout(update, timeStep);
}