我一直在尝试为我创建的javascript游戏制作一些视觉效果,我注意到我正在使用的一段代码来调节我的精灵的颜色,会使我的浏览器内存使用量不断增加,似乎没有限制。当我每帧(通过setInterval)从我的画布上下文中调用getImageData以创建一个新的ImageData对象进行重新着色时,这种内存泄漏只会发生在我的updateimage()函数中。我本以为javascript的垃圾回收器会销毁旧的对象,但如果没有,我不知道如何手动销毁它。任何有关解决此问题或修复此问题的帮助都将不胜感激。我的问题与这个问题非常相似:What is leaking memory with this use of getImageData, javascript, HTML5 canvas 然而,我需要我的代码在由setInterval调用的函数中每帧运行,他把它移到setInterval函数之外的解决方案对我来说不可行,我也不能留言问他是否找到了其他解决方法。
注意:此示例使用getImageData,无法通过将其放入.html文件中来进行本地测试,需要一个Web服务器。此外,它显然使用HTML5元素,因此某些浏览器无法使用它。
编辑:*已解决* 谢谢,下面的解决方案修复了它。我没有意识到您可以像在drawImage()中使用图像一样使用canvas元素,因此我重构了代码,现在使用的内存明显更少。如果有人想看看,我将上传这个更改后的代码到上面链接的页面。
注意:此示例使用getImageData,无法通过将其放入.html文件中来进行本地测试,需要一个Web服务器。此外,它显然使用HTML5元素,因此某些浏览器无法使用它。
编辑:*已解决* 谢谢,下面的解决方案修复了它。我没有意识到您可以像在drawImage()中使用图像一样使用canvas元素,因此我重构了代码,现在使用的内存明显更少。如果有人想看看,我将上传这个更改后的代码到上面链接的页面。
Frames->(test.html)->Images
,你会看到一个不断更新的页面图像流。同时,欢迎来到 Stack Overflow(SO)! :) - Xenethyl