flame是一个十分轻便适合做小游戏的引擎,基于dart语言的flutter框架。简单点来说,他就是分为以下几步
开始→循环(换帧→渲染)几步,很容易理解
所以我们现在便开始吧!

开始

在开始之前,建议先安装flame包

flutter pub add flame

装好之后呢,他会自动在pubspec.yaml文件中的36,37行引入包


接着便在main.dart下导入包

import 'package:flame/game.dart';
import 'package:flame/input.dart';
import 'package:flame/timer.dart';

这几个包常会用到,但第一个包是必须要装的!

flame的基本组成

flame下可以在搭建一个类,这个便是主体部分

class xxx extends FlameGame{void render(Canvas canvas){super.render(canvas);}void update(double dt){super.update(dt);}
}

xxx可以取自己喜欢的名字
其中render就是渲染,负责处理每帧刷新时的动画,canvas就是画图,来画游戏界面的,update就是帧,dt就是帧
这就是flame的大致结构,每帧都会调用这两种方法,而每种方法都有自己的作用。

玩家/角色

接下来就是为这个界面创建角色。
我们为了方便一般都会独自定义一个类

class BulletComponent{final Vector2 position;double speed;double tox;double toy;final double radius;late Paint paint = Paint()..color = Colors.orangeAccent;late Path path = Path()..addOval(Rect.fromLTWH(position.x - radius, position.y - radius, radius * 2, radius * 2));BulletComponent({required this.position, this.speed = 1.0,this.tox = 0,this.toy  = 0, this.radius = 10});void render(Canvas canvas){canvas.drawCircle(position.toOffset(), radius, paint);}void update(double dt){position.setValues(position.x + tox * speed , position.y + toy  * speed);path.reset();path.addOval(Rect.fromLTWH(position.x - radius, position.y - radius, radius * 2, radius * 2));}
}

在这个类中,我们定义了它的位置(position),速度(speed),方向/角度(tox,toy),半径(radius),颜色(Paint)等属性,以及每帧要做的事(渲染)
在这里可能会用到三角函数(sin,cos),但毕竟还没学到,变随便导入个Random包来弥补一下。
其中的update便是在每帧下使这个球x坐标和y坐标在原有的基础下分别添加tox * speed 和 toy * speed,然后重新刷新一下path(碰撞检测点)
render则是不断的再update的基础下画圆
如果说来分个类
render就是负责画面上的绘图
update就是负责后端上的计算
其中BulletComponent({required this.position, this.speed = 1.0,this.tox = 0,this.toy = 0, this.radius = 10});这个十分重要,这个是后面搭建的重要部分,也是把这个引入主体的连接部分。
这些代码搞定过后一个球的样貌格式也便搭建完毕,接下来便是引用了

引用

如果你想创建一个球,那么可以用

late BulletComponent ballgame;

在开始的方法Future<void>? onLoad() async中添加

ball = ballgame(position: Vector2(canvasSize.x/2, canvasSize.y/2),radius: radius.toDouble(),tox:forX,toy:forY, speed: speed)

这里的radius等要自己设置!而这里位置是生成在画布中间(canvasSize.x等时表示画布宽和高)
然后在render的方法下加入

ball.render(canvas);

在update下添加

ball.update(dt);

这样就算完事了
这样一个球便实现了
而flame的基本结构也正是如此,定义一个类,然后在主体中创建,调用,最后在投射在每一帧中
这就是这次的全部内容,有问题可以在下方评论区ask,谢谢!

flutter flame基本结构相关推荐

  1. Flutter Flame 小游戏

    使用Flutter Flame Engine写的一个练习小游戏 项目链接:https://github.com/kmarryme/flutter_games_demo

  2. Flutter教程之使用 Flutter Flame 快速轻松地创建 2D 游戏(教程含源码)

    Flutter 使您能够从单个代码库开发适用于 Android.iOS.桌面和 Web 等平台的应用程序.作为一个多平台的 UI 工具包,Flutter 团队致力于让各类开发者能够快速构建和发布应用. ...

  3. Flutter 基础目录结构介绍、入口自定义widget、等相关组件使用

    提示:此文章为前端学习flutter过程,如有歧义期望各位大大的宝贵意见 学习Dart 基础知识 移步这里 安装flutter环境相关 移步这里 flutter基础组件使用相关 移步这里 文章目录 一 ...

  4. 第 1-4 课:Flutter 项目结构及配置文件详解

    对于一门新语言或新技术的学习来说,在新建了项目之后,了解其项目结构及含义.配置文件的编写,这些对后续的开发和深入学习起到很重要的作用.俗话说磨刀不误砍柴工,Flutter 的学习也同理,我们在新建了 ...

  5. [译] MDC-101 Flutter:Material Components(MDC)基础(Flutter)

    原文地址:MDC-101 Flutter: Material Components (MDC) Basics (Flutter) 原文作者:codelabs.developers.google.com ...

  6. Flutter面试常见开发问题

    本文主要介绍Flutter面试常见开发问题 Flutter 使用了一种全新的方法,您可以使用 widgets代替 Views .Android 中的 View 主要是布局的一个元素,但在 Flutte ...

  7. flutter 图片转base64_京东技术中台的Flutter实践之路

    作者 | 京东 ARES 跨端团队 编辑 | Yonie 在 2019 年,Flutter 推出了多个正式版本,支持的终端越来越多,使用的项目也越来越多.Flutter 正在经历从小范围尝鲜到大面积应 ...

  8. 技术干货 | Flutter 混合开发基础

    导读:Flutter 支持以独立页面.甚至是 UI 片段的方式,集成到现有的应用中,即所谓的混合开发模式.本文主要谈谈 Android 平台下, Flutter 的混合开发与构建. 文|李成达 网易云 ...

  9. 鸿蒙系统起飞!Flutter 完全适配指南

    鸿蒙系统 (HarmonyOS)是华为推出的一款分布式操作系统,那么如何在保证开发迭代效率的前提下,以相对低的成本将移动应用快速移植到鸿蒙平台上呢?美团外卖 MTFlutter 团队近期做了一次技术探 ...

最新文章

  1. Ubuntu 安装简单samba
  2. 基于webpack4.X从零搭建React脚手架
  3. 银行系普惠和小贷系普惠,哪个贷款更靠谱?
  4. mysql语言和php语言_MySQL如何与PHP编程语言一起使用?
  5. chrome浏览器功能介绍
  6. 博客园的神回复,程序猿的奇葩神回复[连载][二]
  7. 小白R语言数据可视化进阶练习一
  8. 无法定位软件包python-pip
  9. App Crash 详解
  10. Spring的AOP实现原理
  11. 前端JS项目实战——瀑布流
  12. 街篮中服务器维修什么时候能结束,街头篮球手游1月6日微信iOS维护公告 服务器扩容...
  13. 看日漫学日语:日漫里常看到的日语100句(建议收藏)
  14. oracle怎么查表空间,如何查看oracle所有的表空间
  15. @Spring事务管理
  16. 数据仓库主题设计及元数据设计
  17. 使用层次聚类的有组织点云的快速平面提取(续)
  18. 对币圈假冒科学家骗子盗取私钥的分析
  19. opencv 图片处理之 png 转 jpg
  20. java8中 Collectors.groupingBy用法

热门文章

  1. python经典类新式类_Python的新式类和经典类
  2. mysql.data.dll 位置_MySqlData.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
  3. 链脉吴雪:链脉智能名片如何帮企业度过“市场寒冬”
  4. JSP自定义标签(一)
  5. 通过PHP调用天市数据的水电煤缴费接口
  6. python剪刀石头布_Python Tkinter教程系列01:剪刀石头布游戏
  7. linux aux是什么命令,Linux查看所有进程ps -aux命令介绍
  8. OSG 球体参数方程绘制
  9. 让您的照片动起来first motion model(1)-关键点抽取模型深度解析
  10. 它又来了!FastJson又被发现漏洞,autotype的安全控制开关限制可以被绕过...你方了没?...