Canvas 帧动画吃苹果小游戏


Posted in HTML / CSS onAugust 05, 2020

先看页面效果。下面四个按钮分别表示开始、结束、暂停、继续

Canvas 帧动画吃苹果小游戏

下面是帧动画图片素材:

Canvas 帧动画吃苹果小游戏

帧动画的实现,关键是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>

到此这篇关于Canvas 帧动画吃苹果小游戏的文章就介绍到这了,更多相关Canvas 帧动画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
CSS3动画之利用requestAnimationFrame触发重新播放功能
Sep 11 HTML / CSS
用CSS3来实现社交分享按钮
Nov 11 HTML / CSS
CSS3制作苹果风格键盘特效
Feb 26 HTML / CSS
CSS中垂直居中的简单实现方法
Jul 06 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
May 10 HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
Dec 13 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
May 03 HTML / CSS
HTML5中的强制下载属性download使用实例解析
May 12 HTML / CSS
AmazeUI 评论列表的实现示例
Aug 13 HTML / CSS
Html5页面播放M4a音频文件
Mar 30 HTML / CSS
HTML页面点击按钮关闭页面的多种方式
Dec 24 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
Jul 28 #HTML / CSS
canvas实现图片镜像翻转的2种方式
Jul 22 #HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
Jul 20 #HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
Jul 16 #HTML / CSS
uniapp+Html5端实现PC端适配
Jul 15 #HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
Jul 10 #HTML / CSS
HTML5 背景的显示区域实现
Jul 09 #HTML / CSS
You might like
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
python框架django基础指南
2016/09/08 Python
Python的装饰器使用详解
2017/06/26 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
python lxml中etree的简单应用
2019/05/10 Python
Python 定义只读属性的实现方式
2020/03/05 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
详解Python 中的容器 collections
2020/08/17 Python
银行实习鉴定
2013/12/13 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js