diff --git a/doc/examples/animations/lib/main.dart b/doc/examples/animations/lib/main.dart index 924d0b1f1..e2073ce3a 100644 --- a/doc/examples/animations/lib/main.dart +++ b/doc/examples/animations/lib/main.dart @@ -1,22 +1,38 @@ +import 'package:flutter/gestures.dart'; import 'package:flame/flame.dart'; import 'package:flame/game.dart'; import 'package:flame/animation.dart' as flame_animation; import 'package:flame/components/animation_component.dart'; import 'package:flutter/material.dart'; -void main() => runApp(MyGame().widget); +void main() { + final game = MyGame(); + runApp(game.widget); + Flame.util.addGestureRecognizer(TapGestureRecognizer() + ..onTapDown = (TapDownDetails evt) { + game.addAnimation(); + }); +} class MyGame extends BaseGame { + final animation = flame_animation.Animation.sequenced('chopper.png', 4, + textureWidth: 48, textureHeight: 48, stepTime: 0.15); + MyGame() { _start(); } + void addAnimation() { + final animationComponent = AnimationComponent(100, 100, animation, destroyOnFinish: true); + animationComponent.x = size.width / 2 - 50; + animationComponent.y = 200; + + add(animationComponent); + } + void _start() async { final Size size = await Flame.util.initialDimensions(); - final animation = flame_animation.Animation.sequenced('chopper.png', 4, - textureWidth: 48, textureHeight: 48, stepTime: 0.15); - final animationComponent = AnimationComponent(100, 100, animation); animationComponent.x = size.width / 2 - 100; animationComponent.y = 100; diff --git a/lib/components/animation_component.dart b/lib/components/animation_component.dart index c189b2a7a..4c5016d24 100644 --- a/lib/components/animation_component.dart +++ b/lib/components/animation_component.dart @@ -5,8 +5,9 @@ import 'package:flame/animation.dart'; class AnimationComponent extends PositionComponent { Animation animation; + bool destroyOnFinish; - AnimationComponent(double width, double height, this.animation) { + AnimationComponent(double width, double height, this.animation, { this.destroyOnFinish = false }) { this.width = width; this.height = height; } @@ -22,6 +23,8 @@ class AnimationComponent extends PositionComponent { double textureY = 0.0, double textureWidth, double textureHeight, + + this.destroyOnFinish = false, }) { this.width = width; this.height = height; @@ -38,6 +41,9 @@ class AnimationComponent extends PositionComponent { @override bool loaded() => animation.loaded(); + @override + bool destroy() => destroyOnFinish && animation.isLastFrame; + @override void render(Canvas canvas) { prepareCanvas(canvas);