mirror of
https://github.com/flame-engine/flame.git
synced 2025-10-30 16:36:57 +08:00
61 lines
1.6 KiB
Dart
61 lines
1.6 KiB
Dart
import 'dart:math';
|
|
|
|
import 'package:examples/commons/ember.dart';
|
|
import 'package:flame/components.dart';
|
|
import 'package:flame/game.dart';
|
|
import 'package:flame/input.dart';
|
|
|
|
class BenchmarkExample extends FlameGame with TapDetector {
|
|
static const description = '''
|
|
See how many SpriteAnimationComponent's your platform can handle before it
|
|
starts to drop in FPS, this is without any sprite batching and such.
|
|
100 animation components are added per tap.
|
|
''';
|
|
|
|
final emberSize = Vector2.all(20);
|
|
late final TextComponent emberCounter;
|
|
final counterPrefix = 'Animations: ';
|
|
final Random random = Random();
|
|
|
|
@override
|
|
Future<void> onLoad() async {
|
|
await addAll([
|
|
FpsTextComponent(
|
|
position: size - Vector2(0, 50),
|
|
anchor: Anchor.bottomRight,
|
|
),
|
|
emberCounter = TextComponent(
|
|
position: size - Vector2(0, 25),
|
|
anchor: Anchor.bottomRight,
|
|
priority: 1,
|
|
),
|
|
Ember(size: emberSize, position: size / 2),
|
|
]);
|
|
children.register<Ember>();
|
|
}
|
|
|
|
@override
|
|
void update(double dt) {
|
|
super.update(dt);
|
|
emberCounter.text = '$counterPrefix ${children.query<Ember>().length}';
|
|
}
|
|
|
|
@override
|
|
void onTapDown(TapDownInfo info) {
|
|
final halfWidth = emberSize.x / 2;
|
|
final halfHeight = emberSize.y / 2;
|
|
addAll(
|
|
List.generate(
|
|
100,
|
|
(_) => Ember(
|
|
size: emberSize,
|
|
position: Vector2(
|
|
halfWidth + (size.x - halfWidth) * random.nextDouble(),
|
|
halfHeight + (size.y - halfHeight) * random.nextDouble(),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|