mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-10-31 08:56:01 +08:00 
			
		
		
		
	fix: RemoveEffect should work within SequenceEffect (#2110)
Since the RemoveEffect was removing its parent and not its target it couldn't work within a SequenceEffect since it was just removing that effect instead.
This commit is contained in:
		| @ -1,9 +1,8 @@ | ||||
| import 'package:flame/src/effects/controllers/linear_effect_controller.dart'; | ||||
| import 'package:flame/src/effects/effect.dart'; | ||||
| import 'package:flame/effects.dart'; | ||||
|  | ||||
| /// This simple effect, when attached to a component, will cause that component | ||||
| /// to be removed from the game tree after `delay` seconds. | ||||
| class RemoveEffect extends Effect { | ||||
| class RemoveEffect extends ComponentEffect { | ||||
|   RemoveEffect({ | ||||
|     double delay = 0.0, | ||||
|     void Function()? onComplete, | ||||
| @ -15,7 +14,7 @@ class RemoveEffect extends Effect { | ||||
|   @override | ||||
|   void apply(double progress) { | ||||
|     if (progress == 1) { | ||||
|       parent?.removeFromParent(); | ||||
|       target.removeFromParent(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| import 'package:flame/components.dart'; | ||||
| import 'package:flame/effects.dart'; | ||||
| import 'package:flame/game.dart'; | ||||
| import 'package:flame/src/effects/remove_effect.dart'; | ||||
| import 'package:flame_test/flame_test.dart'; | ||||
| import 'package:flutter_test/flutter_test.dart'; | ||||
|  | ||||
| void main() { | ||||
| @ -41,5 +42,23 @@ void main() { | ||||
|       game.update(0); | ||||
|       expect(game.children.length, 0); | ||||
|     }); | ||||
|  | ||||
|     testWithFlameGame('as a part of a sequence', (game) async { | ||||
|       final component = PositionComponent(); | ||||
|       await game.ensureAdd(component); | ||||
|       component.add( | ||||
|         SequenceEffect([ | ||||
|           MoveByEffect(Vector2.all(10), EffectController(duration: 1)), | ||||
|           RemoveEffect(), | ||||
|         ]), | ||||
|       ); | ||||
|       game.update(0); | ||||
|       expect(game.children.length, 1); | ||||
|       game.update(0.5); | ||||
|       expect(game.children.length, 1); | ||||
|       game.update(1.0); // This completes the move effect | ||||
|       game.update(0); // This runs the remove effect | ||||
|       expect(game.children.length, 0); | ||||
|     }); | ||||
|   }); | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Lukas Klingsbo
					Lukas Klingsbo