mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-01 10:38:17 +08:00
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;
|
|
}
|
|
}
|