网上有各种说明以及源代码
自己模拟了一下,并进行部分优化
将英雄的移动范围设置在背景区域之内
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画布上画图片
render()函数将被调用多次,多次执行ctx.drawImage(),相当于canvas上有几百张图片为什么不会造成资源浪费?
每次根据移动位置不同,重新添加图片,requestAnimationFrame()函数是频率非常高么?为什么不会造成视觉上的影响?
canvas上不会有几百张图片,可以把canvas看作一个只是存放像素数据的数组,想象你就是在操作画图板,你把图片复制到画图板上几百次。(很不严谨的说法)
事实上你的浏览器页面一直都在刷新,requestAnimationFrame就是在下次浏览器页面刷新的时候触发回调。
写游戏都是这样的,每一帧都要运行一个update、render之类的函数
一周热门 更多>