这个问题与我的框架VilTAGE(https://github.com/ViliX64/VilTAGE)有关。这是一个ASCII网络游戏框架,可以渲染到Canvas。问题在于,绘制时间是计算时间的两倍。
现在,渲染工作的方式是每个CharNode(一个具有文本字符,颜色等的对象)和CanvasElement都有一个HashMap,并在上面绘制了文本。当循环要绘制CharNode(每秒15-30次)时,它将遍历HashMap,找到所需的CanvasElement并将其呈现给主CanvasElement。 (请参阅https://github.com/ViliX64/VilTAGE/blob/master/lib/etc/utility.dart)。
各个CanvasElement捕捉很小(通常约为10x10)。它们使用drawImage(..)绘制;
问题是,在具有70x40 CharNodes的游戏中,当编译为JavaScript时,游戏运行(毫无疑问)非常缓慢甚至更多。
我在犯任何明显的错误吗?或者您能给我一些提高性能的提示吗?
编辑1:它在Firefox和IE上运行最慢。在Google Chrome上的性能更好。
最佳答案
如果像在javascript中一样工作,则问题可能在于您正在缓存CanvasElement,并且drawImage每次调用都必须从中检索bitmapData。这是一个非常昂贵的操作。
您可以尝试使用getImageData缓存imageData并使用putImageData进行绘制(均为CanvasRenderingContext2D方法)