【发布时间】:2012-04-05 03:26:14
【问题描述】:
我正在开发一款游戏,它允许玩家点击一张卡片并以任意方向将其拖过屏幕。任何时候在 800x800 的画布上总共有 64 张 100x80 重叠的卡片,每一张都是程序绘制。正如你们中的一些人可能怀疑的那样,canvas 不喜欢为每一个动作重新绘制整个画布。为了解决这个问题,我使用缓冲画布来绘制卡片,然后尝试使用drawImage() 将该缓冲画布绘制到主画布上。为了确保没有绘图堆积,我使用clearRect() 清除与我计划drawImage() 关联的画布区域。
我遇到的问题是因为用于clearRect() 和drawImage() 的(x,y)坐标来自鼠标的位置,如果用户移动太快,坐标将不同于最后一次执行drawImage() 的时间到在下一个绘制序列期间调用clearRect() 的时间。结果是最后一个序列的剩余抽牌 - 与拖动卡片的速度成正比。
我尝试维护 drawImage() 的 (x,y) 坐标,并在下一个序列中为 clearRect() 使用这些坐标(而不是当前鼠标位置)。然而,现在不是显示残余绘制,而是残余我们有残余清除(擦除)。
关于如何解决这个问题的想法?
注意:我的动画速率是使用 RequestAnimationFrame 而不是 SetInterval() 处理的。
【问题讨论】: