0

我有一个drawButtons函数,它接受“ nonhover”、“ hover1”或“ hover2”的参数并绘制一个设置到画布的新按钮,并且根据它采用的参数,将绘制不同颜色的按钮。setUpGame()当我调用它时它确实有效,但当我调用它时它不起作用draw()。我想从 draw() 中调用它,因为draw()setInterval(). 这样它可以继续检查鼠标是否悬停在按钮上并绘制适当的按钮集。

setUpGame()在任何对象或函数之外调用。在任何函数或对象之外draw()被调用。setInterval()setInterval 调用每秒绘制 80 次。

getMouseOver()另一个实际上应该由 调用的函数draw(),因为它说“如果鼠标在按钮一上:drawButtons("hover1") 等等。当我调用它时它只是不绘制按钮。

浏览器 Javascript 控制台中没有错误。我正在使用最适合我的游戏的 Chrome。

由此我们可以推断,drawButtons()在 from 调用时它的工作没有问题setUpGame()

draw()当我从那里调用它时, as可能drawButtons()不起作用(但让我们更加困惑的是,当我从那里调用它时,displayNumbers 确实会显示数字)并且在玩游戏时它工作正常(这里我们不玩游戏,我们在开始屏幕上)。

可能有问题,getMouseOver()因为这在任何地方都不起作用。

我现在将向您展示getMouseOver()。我的程序越来越大,从一开始就展示太多内容是压倒性的。我打算让这个函数每秒被调用 80 次。

getMouseOver: function() {
    window.onload = (function(){
        window.onmouseover = function(e) {
            // IE doesn't always have e here
            e = e || window.event;

            // get event location

            // change the code so that it gives the relative location
            var location = {
            x: e.pageX - offset.x,
            y: e.pageY - offset.y
            };
            if (location.x > 103.5 && location.x < 265.5) {
                if (location.y > 240 && location.y < 291) {
                    nonGameContent.drawButtons("hover1");
                }
            }
            if (location.x > 103.5 && location.x < 265.5) {
                if (location.y > 160 && location.y < 212) {
                    nonGameContent.drawButtons("hover2");
                }
            }
            else{
                nonGameContent.drawButtons("nonHover");
            }
        }
    })},
4

2 回答 2

0

在这个小提琴中,你有 click() 和 onmousemove() 正在工作。如果您想在开始时显示按钮,或者只是当鼠标悬停在按钮未来位置的某个位置时,我不太明白,但这是一个开始:http: //jsfiddle.net/Akinaru/3a7g2/57/

主要修改:

 canvas.onmousedown = nonGameContent.getMouseClick;
 canvas.onmousemove = nonGameContent.getMouseOver;
于 2013-07-26T00:39:52.593 回答
0

当您将鼠标悬停在画布矩形上时更改其颜色使用 onmousemove 来查找您是否在它上方,然后使用不同颜色的矩形重绘画布

getMouseClick: function() { window.onmousemove = function(e) {

于 2013-07-26T03:25:06.800 回答