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轻松实现圆角效果
Nov 09 HTML / CSS
css3实现波纹特效、H5实现动态波浪效果
Jan 31 HTML / CSS
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
Jun 06 HTML / CSS
CSS3 Media Queries详细介绍和使用实例
May 08 HTML / CSS
纯CSS实现设置半个字符的样式
Jul 03 HTML / CSS
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
Sep 15 HTML / CSS
CSS3 @keyframes简单动画实现
Feb 24 HTML / CSS
HTML5 与 XHTML2
Oct 17 HTML / CSS
使用CSS实现弹性视频html5案例实践
Dec 26 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
Apr 24 HTML / CSS
HTML5中的网络存储实现方式
Apr 28 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
May 26 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与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
python中map的基本用法示例
2018/09/10 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python对于requests的封装方法详解
2019/01/03 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
工程力学专业毕业生求职信
2013/10/06 职场文书
工作人员思想汇报
2014/01/09 职场文书
党员党性分析材料
2014/02/17 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
夏季药店促销方案
2014/08/22 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
检讨书模板大全
2015/05/07 职场文书
婚宴领导致辞
2015/07/28 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android