Javascript 相位器-显示图形对象50毫秒,当一个或多个按键同时发生时,每次按键都会被破坏

Javascript 相位器-显示图形对象50毫秒,当一个或多个按键同时发生时,每次按键都会被破坏,javascript,graphics,settimeout,phaser-framework,Javascript,Graphics,Settimeout,Phaser Framework,我想在用户按键时显示一个50毫秒的矩形draw()功能按单次按键的预期工作。如果同时按下多个键,例如同时按下两个键,则其中一个图形对象不会被破坏 function draw(x, y){ graphics = game.add.graphics(x, y); graphics.clear() graphics.lineStyle(2, 0x0000FF, 1); graphics.beginFill(0x0000FF, 0.5); graphics.dra

我想在用户按键时显示一个50毫秒的矩形
draw()
功能按单次按键的预期工作。如果同时按下多个键,例如同时按下两个键,则其中一个图形对象不会被破坏

function draw(x, y){
    graphics = game.add.graphics(x, y);
    graphics.clear()
    graphics.lineStyle(2, 0x0000FF, 1);
    graphics.beginFill(0x0000FF, 0.5);
    graphics.drawRect(0,0,18,18);
    graphics.endFill(0x0000FF, 0.5);
    // destroy the graphics after 50 ms
    setTimeout(function (){graphics.destroy()}, 50);


}

看起来您的第二次绘图调用(在不到50毫秒的时间内完成)在图形中分配了不同的对象,因此当第一次绘图调用发出超时回调时,它将对第二次调用中创建的图形进行操作

要避免它,您可以:
1) 从图形中生成局部变量(添加var/let)

2) 使用graphics.destroy.bind(graphics)作为超时回调

看起来您的第二次绘图调用(在不到50毫秒的时间内完成)在图形中分配了一个不同的对象,因此当触发第一次绘图调用的超时回调时,它会对第二次调用中创建的图形进行操作

要避免它,您可以:
1) 从图形中生成局部变量(添加var/let)
2) 使用graphics.destroy.bind(图形)作为超时回调