canvas上多次画图片,会不会造成资源浪费? 财富值62

2016-10-28 19:47发布

这是一个英雄抓怪物的小游戏

  • 网上有各种说明以及源代码

  • 自己模拟了一下,并进行部分优化

  • 将英雄的移动范围设置在背景区域之内

部分代码

var render = function () {         if (bgReady) {             ctx.drawImage(bgImage, 0, 0);         }         if (heroReady) {             ctx.drawImage(heroImage, hero.x, hero.y);         }         if (monsterReady) {             ctx.drawImage(monsterImage, monster.x, monster.y);         }         //计分         ctx.fillStyle = "rgb(250,250,250)";         ctx.font = "24px Helvetica";         ctx.textAlign = "left";         ctx.textBaseline = "top";         ctx.fillText("Monsterrs caught: " + monstersCaught, 32, 32);     };  var main = function () {         var now = Date.now();         var delta = now - then;          update(delta / 1000);          render();         then = now;          var w = window;         requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;         // 立即调用主函数         requestAnimationFrame(main);     };
  • 这段代码被执行很多次相当于render()函数被调用多次

  • render()函数主要在canvas画布上画图片

问题

  1. render()函数将被调用多次,多次执行ctx.drawImage(),相当于canvas上有几百张图片为什么不会造成资源浪费?

  2. 每次根据移动位置不同,重新添加图片,requestAnimationFrame()函数是频率非常高么?为什么不会造成视觉上的影响?

1条回答
axun - 这个人很懒,什么都没留下
1楼 · 2016-10-28 20:28.采纳回答

canvas上不会有几百张图片,可以把canvas看作一个只是存放像素数据的数组,想象你就是在操作画图板,你把图片复制到画图板上几百次。(很不严谨的说法)
事实上你的浏览器页面一直都在刷新,requestAnimationFrame就是在下次浏览器页面刷新的时候触发回调。
写游戏都是这样的,每一帧都要运行一个update、render之类的函数

一周热门 更多>