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 mask遮罩实现一些特效
Oct 24 HTML / CSS
CSS3制作半透明边框(Facebox)类似渐变
Dec 09 HTML / CSS
CSS3中:nth-child和:nth-of-type的区别深入理解
Mar 10 HTML / CSS
利用CSS3实现文本框的清除按钮相关的一些效果
Jun 23 HTML / CSS
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
Feb 27 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
Apr 10 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
Apr 24 HTML / CSS
HTML5 Canvas的事件处理介绍
Apr 24 HTML / CSS
Web前端页面跳转并取到值
Apr 24 HTML / CSS
详解HTML5 data-* 自定义属性
Jan 24 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
Mar 19 HTML / CSS
CSS使用伪类控制边框长度的方法
Jan 18 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
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
js实现手机web图片左右滑动效果
2017/12/29 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
应届毕业生个人自荐信范文
2013/11/30 职场文书
医学院校毕业生自荐信范文
2014/01/01 职场文书
清洁工表扬信
2014/01/08 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
离婚被告代理词
2015/05/23 职场文书
八年级作文之友情
2019/11/25 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL