Flameとは
Flameは、Flutterを基盤とした軽量で高速なゲームエンジンです。ゲームループ、コンポーネントシステム、エフェクトやパーティクル、コリジョン検出、ジェスチャーと入力処理、画像やアニメーション、スプライトシートなど、ゲーム開発に必要な機能を提供します。また、Flameは拡張パッケージを通じて、他のパッケージとのシームレスな統合もサポートしています。
flame | Flutter package
A minimalist Flutter game engine, provides a nice set of somewhat independent modules you can choose from.
使い方
Flameのインストール
まず、pubspec.yaml
ファイルにFlameを追加します。
dependencies:
flame: ^1.18.0
基本的なゲームの作成
Flameを使用して基本的なゲームを作成する手順は以下の通りです。
- Gameクラスの作成
Game
クラスを継承したクラスを作成し、onLoad
メソッドをオーバーライドします。
import 'package:flame/game.dart';
class MyGame extends FlameGame {
@override
Future<void> onLoad() async {
// ゲームの初期化処理をここに書きます
}
}
- ゲームウィジェットの作成
MyGame
クラスのインスタンスをFlutterウィジェットツリーに追加します。
import 'package:flutter/material.dart';
import 'package:flame/game.dart';
void main() {
runApp(GameWidget(game: MyGame()));
}
コンポーネントの追加
Flameでは、ゲームの要素をコンポーネントとして扱います。コンポーネントは、画面上に描画されるオブジェクトで、独自の位置、サイズ、描画方法を持ちます。
import 'package:flame/components.dart';
class MyComponent extends PositionComponent {
@override
void render(Canvas canvas) {
// 描画処理をここに書きます
final paint = Paint()..color = Colors.blue;
canvas.drawRect(size.toRect(), paint);
}
@override
void update(double dt) {
// 更新処理をここに書きます
position.add(Vector2(1.0, 0.0) * dt);
}
}
作成したコンポーネントをゲームに追加します。
class MyGame extends FlameGame {
@override
Future<void> onLoad() async {
final myComponent = MyComponent()
..size = Vector2(100.0, 100.0)
..position = Vector2(50.0, 50.0);
add(myComponent);
}
}
パラメータの説明
- size: コンポーネントのサイズを設定します。
Vector2
クラスで幅と高さを指定します。 - position: コンポーネントの位置を設定します。
Vector2
クラスでx座標とy座標を指定します。 - render: コンポーネントの描画処理を行うメソッドです。
Canvas
クラスを使用して描画します。 - update: コンポーネントの更新処理を行うメソッドです。
dt
は前回のフレームからの経過時間を表します。
拡張パッケージの使用
Flameは様々な拡張パッケージを提供しており、これにより機能をさらに拡張することができます。例えば、flame_audio
パッケージを使用して音声を再生することができます。
dependencies:
flame_audio: ^1.0.0
import 'package:flame_audio/flame_audio.dart';
class MyGame extends FlameGame {
@override
Future<void> onLoad() async {
FlameAudio.play('audio_file.mp3');
}
}