Javascript can';不要多次使用该函数

Javascript can';不要多次使用该函数,javascript,html,canvas,Javascript,Html,Canvas,出于某种原因,我似乎不能多次使用我的“播放器”功能,因此这意味着我无法更新它的位置。有人能帮我解释一下原因吗 这是我的密码: var gridHeight=1000,gridWidth=1000,canvashight=250,canvashwidth=250,p=0; var currentPositionX=0; var currentPositionY=0; 函数buildGrid(){ $(“body”).append(“player=new player();在draw()中用函数执

出于某种原因,我似乎不能多次使用我的“播放器”功能,因此这意味着我无法更新它的位置。有人能帮我解释一下原因吗

这是我的密码:

var gridHeight=1000,gridWidth=1000,canvashight=250,canvashwidth=250,p=0;
var currentPositionX=0;
var currentPositionY=0;
函数buildGrid(){
$(“body”).append(“
player=new player();
draw()
中用函数执行的结果覆盖函数定义

如果您只是在这一行前面添加
var
,则播放器的var将被限制在
draw()
的范围内,这可能是您想要的。

jsiddle:

javascript代码片段

function player(x, y, w, h, c) {
        this.x = x || 0;
        this.y = y || 0;
        this.h = h || 20;
        this.w = w || 40;
        this.c = c || "#FF0000";
    }
player = new player();

...

function draw() {

    context.fillstyle = player.c;
    context.fillRect(player.x,player.y,player.w,player.h);
}

setInterval(draw, 3)
基本上,你可以在每次平局中创建一个新的玩家,但我所做的是将你的玩家“类”移动到调用函数之外,并在调用函数之外创建它,这样我们就可以创建一个基本玩家。我还移动了你的

$("#right").on("click", function() {
    player.x += player.w;
   return player.x;
});

准备好进入jQuery文档内部,因为它需要在此处分配事件,而不是在draw函数内部,否则您将添加多个事件侦听器。因此,您现在可以正确使用右按钮。

我刚刚尝试了它,但仍然遇到相同的错误,我认为执行
draw()
from
setInterval()
将其从预期上下文中删除。让我检查如何修复此问题。