【发布时间】:2016-06-04 01:25:57
【问题描述】:
我用画布创建了一个 html5 小游戏。
在画布中,有许多显示的精灵,其中一个自动从左到右移动。其他都是静态的。
当我将鼠标移动到画布上时,我会在一个临时画布中绘制所有精灵,并使用 getImageData 来查找鼠标所在的精灵。
但是 getImageData 会使 Firefox 中的移动精灵异常缓慢。
那么有什么办法可以避免这种减速呢?
这是我的代码:
function getSelectedObject(array_objects)
{
//Clear the temporary canvas :
tmpcx.clearRect(0, 0, tmpc.width, tmpc.height);
/*Search the right sprite object :*/
for(var i = array_objects.length-1; i >= 0; i--)
{
array_objects[i].draw(tmpcx);
imageData = tmpcx.getImageData(mouse_x, mouse_y, 1, 1);
component = imageData.data;
if(component[3] > 0)
{
//Return the sprite object found :
return array_objects[i];
}
else
{
tmpcx.clearRect(0, 0, tmpc.width, tmpc.height);
}
}
return false;
}
canvas.onmousemove = function(event)
{
selectedObject = getSelectedObject(array_objects);
}
【问题讨论】:
-
那么有什么办法可以避免这种减速呢?
-
不清楚您要在此处完成什么。您想要在画布上移动精灵来跟踪鼠标位置吗?
-
移动精灵只是为了检查应用程序的性能:如果移动精灵减速,则表示应用程序性能不佳。通常,移动的精灵不能减速。
-
在临时画布上不断绘图和擦除似乎不必要地昂贵。对此我有两个建议: 1. 为您的游戏使用两个画布,一个用于渲染背景和任何装饰性的东西,另一个用于您想要跟踪的交互元素。 2. 存储每个精灵边界框的坐标。这样,你可以先检查鼠标是否在交互的东西上,然后你可以使用坐标来确定它在哪个元素内
-
我不明白的是为什么你循环通过精灵和绘制/读取画布数据。这是一个超级昂贵的“性能测试”。
标签: javascript html getimagedata