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实现精美横向滚动菜单按钮
Apr 14 HTML / CSS
css3+jq创作含苞待放的荷花
Feb 20 HTML / CSS
CSS类名支持中文命名的示例
Apr 04 HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 HTML / CSS
用HTML5.0制作网页的教程
May 30 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 HTML / CSS
HTML5 canvas基本绘图之绘制五角星
Jun 27 HTML / CSS
html5 初试 indexedDB(推荐)
Jul 21 HTML / CSS
HTML5头部标签的一些常用信息小结
Oct 23 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
Sep 27 HTML / CSS
使用HTML5做的导航条详细步骤
Oct 19 HTML / CSS
新的CSS 伪类函数 :is() 和 :where()示例详解
Aug 05 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批量生成图片缩略图的方法
2015/06/18 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Python while 循环使用的简单实例
2016/06/08 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
numpy.where() 用法详解
2019/05/27 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
中学生自我鉴定
2014/02/04 职场文书
党员实事承诺书
2014/03/26 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
高中生毕业评语
2014/12/30 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
昆虫记读书笔记
2015/06/26 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang