前言
我说Flutter的跨端一致性并非首创
但凡你用过Unity3D,Unreal等游戏引擎,你就会发现 这些不都是跨端的吗?不都是开局一块画布,剩下随便整么?
既然和游戏引擎作对比
那么我们真的拿Flutter来做个游戏吧
FLAME引擎
这里我用了一款基于的Flutter的游戏引擎,名为
FLAME
。使用它开发游戏,基本用不到Flutter里的那些Widget
,所以就有了标题里的提问
一个Flutter应用不使用Flutter的Widget
,那还叫Flutter吗?
不管了,先把这篇文章写完,抽空再用widget
重做一次这个游戏
游戏引擎基础
引入Flame
库
开发游戏,最基础就是这三件事
- 刷新机制(update)
- 渲染画布(renderer)
- 输入事件(events)
在Flame
中,一个基础的游戏框架代码如下
刷新,渲染都有了,事件呢,在本游戏中我们加入拖动事件
渲染图形元素
- 飞机
飞机的图形素材是一个精灵图,其中前面两帧是飞行状态,后面三帧是爆炸状态
然后我们通过add
方法,将图形元素展示到画面中
- 子弹
一颗子弹的出现逻辑以及生命周期是这样的
- 从屏幕外生成
- 向着飞机当前坐标的方向移动
- 移出屏幕即销毁
通过调用这个addBullet
的方法,我们就能在屏幕中朝着飞机所在位置发射一颗子弹了
为了发射多颗,我们再新建一个函数addGroupBullet
刷新机制
在Flame
提供的update
方法中我们需要更新所有子弹的位置,因为子弹不是静止的,需要一直移动呀!
开始有点带感
了吧?
飞机的移动
碰撞检测
在每次刷新子弹坐标的时候,去检测一下是否和当前飞机的坐标重合了,重合了游戏就结束啦
这里用了一个简单的判断机制,并没有精确到飞机的外轮廓。一是精确到外轮廓将带来更大的运算量,也比较复杂。二是那样的游戏体验不见得好,毕竟在手机玩的话,手指要挡住大部分飞机的图形
游戏结束
代码仓库
github.com/ezshine/flu…
后话
这么写,从代码层面看,和Flutter关系不大,但利用Flutter的跨端能力,我们可以很容易的开发一个横跨Mac,Linux,Windows,Web,iOS,Android端的小游戏。如果你不会用那些开发游戏的IDE,比如Unity3D等,那Flutter也是一个不错的选择。
关注大帅
一个设计师出身的老程序猿,希望写代码到70岁
近期文章(感谢掘友的鼓励与支持???)
- ?做了一夜动画,就为让大家更好的理解Vue3的Composition Api 940赞
- ?2020更新,Vue仿探探拖拽卡片的效果 1114赞
- ?超详细,Flutter2.0构建Web应用的实际体验|技术点评 14赞
- ?Webview的使用 | VSCode插件开发系列教程 19赞
- ?推出掘金统计dashboard功能【我爱掘金】0.0.15|牛气冲天新年征文 7赞
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!