Phaser - 显示图形对象 50 毫秒,并在同时按下一个或多个按键时销毁每个按键
Phaser - Show graphic objects for 50ms and destroy for each key press when one or more key presses occur simultaneously
我想在用户按下某个键时为 50ms
显示一个矩形。 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) 用图形做一个局部变量(add var/let)
2) 使用 graphics.destroy.bind(graphics) 作为超时回调
我想在用户按下某个键时为 50ms
显示一个矩形。 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) 用图形做一个局部变量(add var/let)
2) 使用 graphics.destroy.bind(graphics) 作为超时回调