如何使用Canvas帧动画的方式制作简单的吃苹果小游戏
Admin 2022-07-02 群英技术资讯 537 次浏览
先看页面效果。下面四个按钮分别表示开始、结束、暂停、继续
下面是帧动画图片素材:
帧动画的实现,关键是Canvas API ctx.drawImage() (9个参数)和 setInterval 定时器。
设置图片的视图窗口,每次执行定时任务,位移展示下一帧图片。
直接上代码,Ctrl+C/V 即插即用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>帧动画</title> </head> <body> <canvas id="canvas" width="400" height="300"></canvas> <div class=""> <button class="start-btn" type="button">重新吃</button> <button class="end-btn" type="button">不吃了</button> <button class="pause-btn" type="button">歇一歇</button> <button class="continue-btn" type="button">继续吃</button> </div> <script type="text/javascript"> const canvas = document.getElementById("canvas") canvas.style.border = "1px solid black" const ctx = canvas.getContext("2d") const img = new Image() // 创建图片对象 let timer // 定时器标识符 let millisec = 300 // 执行时间间隔 let colIndex = 0 // 列数 let rowIndex = 0 // 行数 const timerFun = () => { // 声明定时器执行函数 console.log("设置定时器"); ctx.clearRect(0, 0, canvas.style.width, canvas.style.height) // 清除画布 if (rowIndex < 3) { // 如果是前5帧 ctx.drawImage(img, colIndex * 240, rowIndex * 240, 200, 200, 50, 50, 200, 200) // 图片对象,x坐标,y坐标(注:图片上定位的坐标),width,height(图片上截取的大小),x坐标,y坐标(注:图片在画布上的起点,即左上角),width,height(缩放,不是裁剪) colIndex++ // 下一帧 if (colIndex > 4) { colIndex = 0 rowIndex++ } } else { colIndex = 0 rowIndex = 0 } } img.onload = () => { timer = setInterval(timerFun, millisec) } img.src = "image/apple.jpg" const startBtn = document.getElementsByClassName('start-btn')[0] const endBtn = document.getElementsByClassName('end-btn')[0] const pauseBtn = document.getElementsByClassName('pause-btn')[0] const continueBtn = document.getElementsByClassName('continue-btn')[0] startBtn.addEventListener('click', () => { console.log("点击开始", timer) clearInterval(timer) colIndex = 0 // 列数 rowIndex = 0 // 行数 timer = setInterval(timerFun, millisec) }) endBtn.addEventListener('click', () => { console.log("点击结束", timer) clearInterval(timer) colIndex = 0 rowIndex = 0 ctx.drawImage(img, colIndex * 240, rowIndex * 240, 200, 200, 50, 50, 200, 200) timer = 0 }) pauseBtn.addEventListener('click', () => { console.log("点击暂停", timer) clearInterval(timer) timer = 0 }) continueBtn.addEventListener('click', () => { if (timer) { alert('吃着呢,别催') return } console.log("点击继续", timer) timer = setInterval(timerFun, millisec) }) </script> </body> </html>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了CSS 阴影动画优化技巧,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要介绍了CSS 实现内容高度不够的时候底部(footer)自动贴底,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
使用css3 3d动画可以实现很多实用的炫酷特效,这篇文章就给大家分享一个模拟书本翻页的动画特效,对大家学习和掌握CSS 3d动画有一定的参考价值。下面是css3书本翻页效果的具体代码,感兴趣的朋友一起来学习一下吧。
这篇文章给大家分享一个loading动画示例,是一个吃豆人的效果。小编觉得挺有趣的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
最近,在CodePen上看到这样一个非常有意思的效果:这个效果的核心难点在于气泡的一种特殊融合效果。其源代码在:CodePenDemo--Goeyfooter,作者主要使用的是SVG滤镜完成的该效果,感兴趣的可以戳源码看看。其中,要想灵活运用SVG中的feGaussian...
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008