canvas游戏之 笨鸟飞管道

核心步骤

笨鸟设计思路

一: 游戏js

初始化帧数 设置一个run的游戏入口  里面开个定时器执行 游戏开始的函数  还需要游戏暂停  游戏结束函数

二:帧率js

初始化 总帧数  开始时间  开始帧数  真实帧数  里面定义一个方法计算真实帧数(帧数统计函数)

该函数让总帧数每帧都递增 记录当前时间  只有当前时间-开始时间>1S的时候 才开始计算真实帧率

计算方法是 总帧数-开始的帧数  最后别忘了更新开始时间和开始帧数  开始时间=当前时间  开始帧数等于当前总帧数

然后在Game js 文件初始化里面 实例化该帧率对象 顺便获取上下文绘图 传入ID获得 然后在游戏开始函数把帧数和时间

绘制到画布上 利用实例化对象执行帧数统计函数 当然有画布肯定需要清屏 把真实帧数和总帧数绘制到画布上

三:加载本地数据

LoadSourceTools

初始化 一个对象用来保存所有的加载出来的图片 ,定义一个方法用来加载本地图片

利用AJAX  创建请求对象 监听状态码  onreadystatechang  判断状态码

请求对象.readyState==4  请求对象.status==200 表示请求成功

定义一个变量记录加载图片数量  获取请求的数据 请求对象.responseText

把获得数据转换为json格式  JSON.parse 建立一个图片数组接收json数据里面的.images

遍历数组创建图片对象 src 索引  在每一张图片加载完后  记录图片的个数++

拿到数据里面的对应的名字 然后给用来保存图片的对象动态添加名字把image传入到该对象中

通过一个回调函数来获得该对象 ,图片数组的长度,图片的个数

最后请求对象通过.open('get',数据名称) 获得数据

请求对象.send(null) get方法可以不写字符串

最后在游戏js 初始化中 实例化加载本地数据对象 调用该方法 获取里面的图片

四:绘制背景 并且运动

初始化所需要的数据

图片资源  x坐标 y坐标 图片宽高 速度用来移动  总格数,当前页面显示的个数

定义3个方法 一个用来渲染 一个用来让图片移动 一个停止

渲染方法 需要画2倍的个数 因为需要无限循坏 通过drawImage画

具体参数为 当前图片 x坐标+对应i*宽度, y坐标 图片宽高

更新方法 让x坐标按照指定的速度递减 当走过一个一个屏幕也就是总个数*图片宽是后,要让x坐标回到原点

达到无限循环效果

停止方法就是让速度变为0

在游戏js 的游戏运入口放法里面实话对应的对象 通过之前指定的图片名称 在初始化里面判断所有图片是否加载

完成,加载完成就调用run方法  然后在游戏运行方法里面执行对应的渲染和移动方法

第五步 绘制管道

初始化所需要的数据,图片资源 一个控制管道口方向的变量 图片宽度 图片的高度

x坐标 画布最右侧  y坐标口向下为0 口向上为画布高度-(地板+图片高度) 速度

定义三个3个方法 和绘制背景一样 不同的是 更新的时候当坐标x小于图片的宽时候就

移除管道 在游戏js 入口定义一个数据把实例化对象装起来 每100帧绘制一个管道 调用

渲染和移动方法

六步 小鸟的自由落体

x坐标 画布1/3  y坐标100  宽图片宽 高图片高  翅膀状态 对应图片的三个状态

用012表示  翅膀煽动的频率  小鸟下落时当前的总帧数 下落速度

下落速度有个公式 0.001*0.5*9.8*Math.pow(帧数差,2)

在游戏js 初始化实例化小鸟对象 在游戏运行调用移动和渲染方法

七步 小鸟自由落体加旋转

初始化一个旋转角度

在渲染方法里面先把坐标位移到图片中心再旋转

在移动方法里面角度+1

八步 点击让小鸟飞

初始化一个小鸟状态,记录小鸟当前的状态,0为自由落体,1为点击向上飞 再定义一个空气阻力,

这个空气阻力用来判断假如用户不点击 会把小鸟状态转换为自由落体

飞到画布顶端判断不让飞出顶端

定义一个点击方法 用来改变小鸟的状态 改变角度,头向上,每次点击初始化空气阻力

九步 碰撞检测

初始化一个变量用来记录小鸟是否死亡 小鸟死亡的状态 碰到地板和管道 都调用gameOver函数

小鸟本身和管道和小鸟关系

小鸟本身控制 碰到地板游戏结束 调用gameOver函数

管道和小鸟 碰到游戏结束 具体关系用图表示

十步 鸟死亡特效加游戏结束

鸟方法 初始化一个变量记录鸟是否死亡 一个动画索引

在渲染方法判断鸟是否死亡 定义死亡图片宽高  定义一个列和行用来截取图片位置 把图片绘制到

对应小鸟死亡的位置上  把游戏结束的图片绘制到画布上  return 结束函数

在移动方法让动画索引递增,当动画索引等于列*行的时候就结束游戏 return 结束程序

废话不多说 看代码


游戏主体文件






帧率计算文件


因为没服务器,加载本地数据



背景图片



管道




小鸟






碰撞检测图示

小鸟自己碰撞 地板和天空


管道和小鸟之间的关系





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容