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 相关文章推荐
详解CSS的border边框属性及其在CSS3中的新特性
May 10 HTML / CSS
css3动画效果抖动解决方法
Sep 03 HTML / CSS
利用css3制作3D样式按钮实现代码
Mar 18 HTML / CSS
CSS图片翻转动画技术详解(IE也实现了)
Apr 03 HTML / CSS
css3边框_动力节点Java学院整理
Jul 11 HTML / CSS
HTML5中5个简单实用的API
Apr 28 HTML / CSS
canvas需要在标签里直接定义宽高
Dec 17 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
Apr 15 HTML / CSS
HTML5操作WebSQL数据库的实例代码
Aug 26 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
Nov 14 HTML / CSS
iframe在移动端的缩放的示例代码
Oct 12 HTML / CSS
webView加载html图片遇到的问题解决
Oct 08 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
Python中static相关知识小结
2018/01/02 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Python重新加载模块的实现方法
2018/10/16 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
Python 绘制可视化折线图
2020/07/22 Python
学习Python爬虫的几点建议
2020/08/05 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
好家长事迹材料
2014/01/23 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
《藏戏》教学反思
2016/02/23 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python