flame_audio 1.3.0 flame_audio: ^1.3.0 copied to clipboard
Audio support for the Flame game engine. This containst all audio related code will live in the future, using the audioplayers package.
import 'package:flame/components.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';
import 'package:flame/palette.dart';
import 'package:flame_audio/audio_pool.dart';
import 'package:flame_audio/flame_audio.dart';
import 'package:flutter/widgets.dart' hide Animation;
void main() {
runApp(GameWidget(game: AudioGame()));
}
/// This example game showcases three possible use cases:
///
/// 1. Use the static FlameAudio class to easily fire a sfx using the default
/// configs for the button tap.
/// 2. Uses a custom AudioPool for extremely efficient audio loading and pooling
/// for tapping elsewhere.
/// 3. Uses the Bgm utility for background music.
class AudioGame extends FlameGame with TapDetector {
static Paint black = BasicPalette.black.paint();
static Paint gray = const PaletteEntry(Color(0xFFCCCCCC)).paint();
static TextPaint text = TextPaint(
style: TextStyle(color: BasicPalette.white.color),
);
late AudioPool pool;
@override
Future<void> onLoad() async {
pool = await FlameAudio.createPool(
'sfx/fire_2.mp3',
minPlayers: 3,
maxPlayers: 4,
);
startBgmMusic();
}
Rect get button => Rect.fromLTWH(20, size.y - 300, size.x - 40, 200);
void startBgmMusic() {
FlameAudio.bgm.initialize();
FlameAudio.bgm.play('music/bg_music.ogg');
}
void fireOne() {
FlameAudio.play('sfx/fire_1.mp3');
}
void fireTwo() {
pool.start();
}
@override
void render(Canvas canvas) {
super.render(canvas);
canvas.drawRect(size.toRect(), black);
text.render(
canvas,
'(click anywhere for 1)',
Vector2(size.x / 2, 200),
anchor: Anchor.topCenter,
);
canvas.drawRect(button, gray);
text.render(
canvas,
'click here for 2',
Vector2(size.x / 2, size.y - 200),
anchor: Anchor.bottomCenter,
);
}
@override
void onTapDown(TapDownInfo details) {
if (button.containsPoint(details.eventPosition.game)) {
fireTwo();
} else {
fireOne();
}
}
}