mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-01 01:18:38 +08:00
94 lines
2.3 KiB
Dart
94 lines
2.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flame/game.dart';
|
|
import 'package:flame/time.dart';
|
|
import 'package:flame/text_config.dart';
|
|
import 'package:flame/position.dart';
|
|
import 'package:flame/gestures.dart';
|
|
import 'package:flame/components/timer_component.dart';
|
|
|
|
void main() {
|
|
runApp(GameWidget());
|
|
}
|
|
|
|
class GameWidget extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(routes: {
|
|
'/': (BuildContext context) => Column(children: [
|
|
RaisedButton(
|
|
child: const Text("Game"),
|
|
onPressed: () {
|
|
Navigator.of(context).pushNamed("/game");
|
|
}),
|
|
RaisedButton(
|
|
child: const Text("BaseGame"),
|
|
onPressed: () {
|
|
Navigator.of(context).pushNamed("/base_game");
|
|
})
|
|
]),
|
|
'/game': (BuildContext context) => MyGame().widget,
|
|
'/base_game': (BuildContext context) => MyBaseGame().widget
|
|
});
|
|
}
|
|
}
|
|
|
|
class RenderedTimeComponent extends TimerComponent {
|
|
final TextConfig textConfig =
|
|
const TextConfig(color: const Color(0xFFFFFFFF));
|
|
|
|
RenderedTimeComponent(Timer timer) : super(timer);
|
|
|
|
@override
|
|
void render(Canvas canvas) {
|
|
textConfig.render(
|
|
canvas, "Elapsed time: ${timer.current}", Position(10, 150));
|
|
}
|
|
}
|
|
|
|
class MyBaseGame extends BaseGame with TapDetector, DoubleTapDetector {
|
|
@override
|
|
void onTapDown(_) {
|
|
add(RenderedTimeComponent(Timer(1)..start()));
|
|
}
|
|
|
|
@override
|
|
void onDoubleTap() {
|
|
add(RenderedTimeComponent(Timer(5)..start()));
|
|
}
|
|
}
|
|
|
|
class MyGame extends Game with TapDetector {
|
|
final TextConfig textConfig =
|
|
const TextConfig(color: const Color(0xFFFFFFFF));
|
|
Timer countdown;
|
|
Timer interval;
|
|
|
|
int elapsedSecs = 0;
|
|
|
|
MyGame() {
|
|
countdown = Timer(2);
|
|
interval = Timer(1, repeat: true, callback: () {
|
|
elapsedSecs += 1;
|
|
});
|
|
interval.start();
|
|
}
|
|
|
|
@override
|
|
void onTapDown(_) {
|
|
countdown.start();
|
|
}
|
|
|
|
@override
|
|
void update(double dt) {
|
|
countdown.update(dt);
|
|
interval.update(dt);
|
|
}
|
|
|
|
@override
|
|
void render(Canvas canvas) {
|
|
textConfig.render(canvas, "Countdown: ${countdown.current.toString()}",
|
|
Position(10, 100));
|
|
textConfig.render(canvas, "Elapsed time: $elapsedSecs", Position(10, 150));
|
|
}
|
|
}
|