画布多个图像和移动浏览器性能
Canvas multiple images and Mobile Browser performance
我正在写关于HTML5画布的移动浏览器性能的文章。我正在尝试制作一个简单的平台游戏(比如超级马里奥兄弟)。我有一个主角,两个敌人和模仿跳台的积木。角色和敌人由drawImage绘制,区块由fillRect绘制(目前,稍后也将是drawImage)。所有内容都设置了动画(当角色移动时,角色X将添加到块X,依此类推)。
现在我正在尝试添加一些随机硬币。首先,我为图像创建了变量
var coinB = new Image();
coinB.src = 'coin.png';
下一步,我将创建带有随机X和Y的对象的数组:
var k;
for (k = 0; k <= 30; k++) {
coins.push({
x: Math.floor(Math.random() * 36 + 4) * 100,
y: Math.floor(Math.random() * 3 + 1) * 100,
width:25,
height:25
});
}
在那之后,我试着选择所有的东西并绘制:
var l;
/* left is the character X for the animation */
for (l = 0; l < coins.length; l++) {
ctx.drawImage(coinB, coins[l].x - left, coins[l].y, coins[l].width, coins[l].height);
}
所有内容都在requestAnimFrame中的函数()中。
不幸的是,在那之后,游戏在Mobile FireFox(Chrome Mobile 20-30 fps)上的帧速率约为30fps(之前没有硬币时为60fps)。因此,硬币大约是fps的一半。
有没有更好的方法来导入图像并绘制它们?例如,我对所有的东西都执行new Image()
(mainchar=new Image(),敌人=new Images(),硬币=new Image[()=ect),与.src
相同。我认为这不是最好的解决方案。我应该怎么做,以获得更好的性能(减少fps)?谢谢你的帮助。
我也有类似的经历;我一直在寻找技巧和窍门,但没有神奇的方法来解决性能问题。提高性能的关键是将对"drawImage"的调用减少到绝对最小。。。请记住,这是您流程的瓶颈!因此,一定要只画出当前可见的东西(即不要画出视野之外的硬币/方块/背景)。
对于什么样的关注图片加载,我看不出有任何替代你目前正在做的事情。你能做的最好的事情就是使用一个唯一的文件,包含所有的图像,然后在你需要的时候使用正确的部分;这样可以减少下载时间(1个较大的文件比许多较小的文件要好),但不会提高性能。
希望这有点帮助,玩得开心!
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- 在循环中附加事件处理程序时出现浏览器性能问题
- Javascript对象中的跨浏览器密钥查找性能
- 多年来浏览器的Javascript性能改进
- 是否有适用于iOS和Android浏览器的性能指南
- 分析生产中应用程序的浏览器性能
- 如何“性能检测”浏览器
- JavaScript锁定功能,以防止递归(浏览器冻结/性能)
- 对应用程序中浏览器的相对性能具有启发性
- 画布多个图像和移动浏览器性能
- node-webkit与chrome浏览器中应用程序的性能
- 哪个javascript UI框架是我对跨平台/浏览器性能的赌注
- 如何在浏览器中对代码进行性能测试
- 根据浏览器性能添加效果
- 如何调试客户端浏览器/HTML结构的性能问题
- 当拖动包含数千个子节点的Div元素时,提高浏览器性能
- 浏览器性能:' display:none ' vs .detach() '
- 测试繁重的javascript脚本时,计算机/浏览器性能较慢
- 浏览器性能显示/可见性
- 较差的浏览器性能取消隐藏一个大(>1000行,20列)表