mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-01 01:18:38 +08:00 
			
		
		
		
	 1ef518794c
			
		
	
	1ef518794c
	
	
	
		
			
			This PR ensures that all component rebalancing operations are resolved from a single location, after the update stage but before the render stage (thus, components may get reordered during the update, and these changes will go into effect during the rendering step on the same game tick). This also fixes the problem where the child changing the priorities of its parent would cause a ConcurrentModificationError. A number of methods that were used to handle rebalancing are now marked as deprecated. From the user's perspective, the only API they should be using is the .priority setter.
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flame/components.dart';
 | |
| import 'package:flame/extensions.dart';
 | |
| import 'package:flame/game.dart';
 | |
| import 'package:flame/input.dart';
 | |
| 
 | |
| class PriorityExample extends FlameGame with HasTappables {
 | |
|   static const String description = '''
 | |
|     On this example, click on the square to bring them to the front by changing
 | |
|     the priority.
 | |
|   ''';
 | |
| 
 | |
|   PriorityExample()
 | |
|       : super(
 | |
|           children: [
 | |
|             Square(Vector2(100, 100)),
 | |
|             Square(Vector2(160, 100)),
 | |
|             Square(Vector2(170, 150)),
 | |
|             Square(Vector2(110, 150)),
 | |
|           ],
 | |
|         );
 | |
| }
 | |
| 
 | |
| class Square extends RectangleComponent
 | |
|     with HasGameRef<PriorityExample>, Tappable {
 | |
|   Square(Vector2 position)
 | |
|       : super(
 | |
|           position: position,
 | |
|           size: Vector2.all(100),
 | |
|           paint: PaintExtension.random(withAlpha: 0.9, base: 100),
 | |
|         );
 | |
| 
 | |
|   @override
 | |
|   bool onTapDown(TapDownInfo info) {
 | |
|     final topComponent = gameRef.children.last;
 | |
|     if (topComponent != this) {
 | |
|       priority = topComponent.priority + 1;
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| }
 |