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实现Material Design效果
Mar 09 HTML / CSS
CSS+jQuery+PHP+MySQL实现的在线答题功能
Apr 25 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
Mar 06 HTML / CSS
鲜为人知的HTML5语音合成功能
May 17 HTML / CSS
html5 canvas 简单画板实现代码
Jan 05 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
May 10 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 HTML / CSS
使用phonegap查找联系人的实现方法
Mar 31 HTML / CSS
html5 http的轮询和Websocket原理
Oct 19 HTML / CSS
Html5在手机端调用相机的方法实现
May 13 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
Aug 17 HTML / CSS
详解Html5项目适配系统深色模式方案总结
Apr 14 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php 错误处理经验分享
2011/10/11 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
angular 实时监听input框value值的变化触发函数方法
2018/08/31 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
Python with用法实例
2015/04/14 Python
详解Python pygame安装过程笔记
2017/06/05 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Flask配置Cors跨域的实现
2019/07/12 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
留学推荐信怎么写
2014/01/25 职场文书
运动会获奖感言
2014/02/11 职场文书
平面设计求职信
2014/03/10 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
委托书范本
2014/09/13 职场文书
导游欢迎词范文
2015/01/23 职场文书
户外活动总结
2015/02/04 职场文书
Python使用Kubernetes API访问集群
2021/05/30 Python