Files
flame/FAQ.md
Lukas Klingsbo a1b6ffa04a Game as a Component (#906)
* Game as a component

* Fix component stories

* Effects are now components

* Update effects docs

* Handle swap of parent

* Fix reAddChildren

* Wait for children to be added

* BaseComponent and PositionComponent to be non-abstract

* Simplify HasGameRef

* Revert so that onLoad can be null

* Fix example description

* Effects as components

* Remove gameRef from addChildren

* Fix hasGameRef

* Start migrating effects

* Updated comments of effect fields

* Fix comments

* Continue to fix sequence and combined effects

* Upgrade ordered_set

* Fix position_component_test

* BaseComponent -> Component

* Fix combined and sequence effects

* Await components to be added in tests

* Remove unnecessary game.update in tests

* Fix some tests related to composition

* BaseGame should be used in examples

* Fix CombinedEffect test

* Keyboard code to be based on Component

* Fix keyboard tests

* Fix analyze problems

* Fix sequence_effect

* Fix combined_effect_test

* Store peak state instead of end state

* Fix sequence_effect tests

* Update tutorial

* Fix tutorial 1

* Remove SimplePositionComponentEffect

* Remove unused test variable

* Update docs

* Removed onMount

* Remove onMount

* Add missing dartdoc

* Fix dart docs

* Add super.update where needed

* Move reAddChildren to component

* Reorganize method order in game widget

* preOffset -> initialDelay, postOffset -> peakDelay

* Introduce component.onParentChange

* Remove tests in wrong file

* Fix composed component test

* Add game lifecycle test

* Use BaseGame for mouse cursor test

* Oxygen should (?) not call super.update

* Use BaseGame in keyboard_test

* Fix onLoad to be properly cached

* Re-add unintentionally removed override

* Fix info for collision detection tests

* Add test for correct lifecycle on parent change

* Fix particles example

* Add component lifecycle diagram to the docs

* Add docs for the game lifecycle

* onRemove should be called when a game is removed from the widget

* Fix analyze errors

* prepare should be called from the component itself, not its parent

* Fix dartdoc

* onParentChange -> onMount

* onMount should have void as return type

* Simplify the loaderFuture in GameWidget

* Fix mock_canvas

* Fix rebase problem

* Remove asComponent

* Less complex _loaderFuture

* Add super.update to no_fcs parallax example

* Fix async tests

* Revert _loaderFuture

* Fix analyze issues

* await gameWithCollidables

* Keep epsilon small where it can be

* tappable methods should return bool

* Game lifecycle is now the same as for Component

* Remove mustCallSuper from component.update

* Make onLoadCache protected

* @internal on onLoadCache

* Cache/Memoize debugPaint and debugTextPaint

* Fix imports

* Fix comments

* Always call super.onLoad so that mixins can override it

* Add forgotten super.onLoad

* Bump coverage percentage

* HasCollidables should override update

* Fix Game comments

* Fix some dartdoc

* Apply suggestions from code review

Co-authored-by: Erick <erickzanardoo@gmail.com>

* Game + Loadable as mixins

* Update packages/flame/lib/src/game/game_widget/game_widget.dart

Co-authored-by: Luan Nico <luanpotter27@gmail.com>

* Update loadable docs

* Fix comments

* Move fps_counter

* Fix keyboard example

* Fix dartdoc

* Remove tutorials temporarily

* Fix game lowlevel graph

* Fix resize issue

Co-authored-by: Erick <erickzanardoo@gmail.com>
Co-authored-by: Luan Nico <luanpotter27@gmail.com>
2021-09-15 00:17:49 +02:00

4.9 KiB

FAQ

This file contains Frequently Asked Questions and their answers. Please feel free to make PRs to amend this file with new questions.

Flame only provides a thin wrapper over the audioplayers library. Please make sure the problem you are having is with Flame. If you have a low-level or hardware related audio problem, probably it's something related to audioplayers, so please feel free to head to that repository to search your problem or open your issue. If you indeed have a problem with the Flame wrapper around audioplayers, then open an issue here.

Drawing over the notch (for Android)

In order to draw over the notch, you must add the following line to your styles.xml file:

<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>

For more details, please check this PR from impulse.

Common exceptions/errors

ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized

Since Flutter 1.10.x, when using some of Flame.device methods, like the methods for enforcing the device orientation, before the runApp statement, the following exception can happen:

E/flutter (16523): [ERROR:flutter/lib/ui/ui_dart_state.cc(151)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
E/flutter (16523): If you're running an application and need to access the binary messenger before `runApp()` has been called (for example, during plugin initialization), then you need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()` first.
E/flutter (16523): If you're running a test, you can call the `TestWidgetsFlutterBinding.ensureInitialized()` as the first line in your test's `main()` method to initialize the binding.

To prevent that exception from happening, add the following line before calling those utilities methods:

WidgetsFlutterBinding.ensureInitialized();

Examples

We have a lot of examples! The simplest of all is in the package example folder. This folder must be called example and contain a single project, so it's a very simple generic example game.

However there is another examples folder directly in the git root which showcases most of the features that exist in Flame.

If you want a more full-fledged game, please check:

  • BGUG: Blue Fire's open source fast paced side-scrolling platformer. It is mostly up-to-date with Flame and uses a good chunk of the features offered by the engine.
  • renancaraujo's port of the trex Chrome game in Flame
  • Bob Box: which is easy to grasp and a good display of our core features.

What is the difference between Game and FlameGame?

Game is the most barebone interface that Flame exposes. If you extend Game instead of FlameGame , you will need to implement a lot of things yourself. Flame will hook you up on the game loop, so you will have to implement render and update yourself from scratch. If you want to use the component system, you can, but you don't need to.

FlameGame extends Game and adds lots of functionality on top of that. Just add your components to it and it works. They are rendered and updated automatically. You might still want to override some of FlameGame's methods to add custom functionality, but you will probably be calling the super method to let FlameGame do its work.

How does the Camera work?

If you are using FlameGame, you have a camera attribute that allows you to off-set all non-HUD components by a certain amount. You can add custom logic to your update method to have the camera position be tracked based on the player position, for example, so the player can be always on the center or on the bottom.

For a more in-depth tutorial on how the camera works (in general & in Flame) and how to use it, check erickzanardo's excellent tutorial, published via FireSlime.

How do you handle touch events on your game?

You can always use all the Widgets and features that Flutter already provide, but Flame wraps the gesture detector callbacks on its base Game class so it can be a little easier to handle those events, you can find more about it on the input documentation page:

https://flame-engine.org/docs/#/input

Other questions?

Did you not find what you needed here? Please head to FireSlime's Discord channel where the community might help you with any more questions that you might have.