mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-02 11:43:19 +08:00
feat: Add DoubleTapCallbacks that receives double-tap events. (#2327)
As-is As mentioned in #2321, the user needs to propagate double-tap events to the component tree using DoubleTapDetector & propagateToChildren until now. To-be Any components that are mixed into the DoubleTapCallbacks receive double-tap-related events. Same as DragCallbacks, there is no need to add mixin to the game like HasDoubleTapCallbaks as before.
This commit is contained in:
committed by
GitHub
parent
0c14d4cb87
commit
b5f79d1ce4
65
examples/lib/stories/input/double_tap_callbacks_example.dart
Normal file
65
examples/lib/stories/input/double_tap_callbacks_example.dart
Normal file
@ -0,0 +1,65 @@
|
||||
import 'package:examples/commons/ember.dart';
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flame/experimental.dart';
|
||||
import 'package:flame/game.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class DoubleTapCallbacksExample extends FlameGame with DoubleTapCallbacks {
|
||||
static const String description = '''
|
||||
In this example, we show how you can use the `DoubleTapCallbacks` mixin on
|
||||
a `Component`. Double tap Ember and see her color changing.
|
||||
The example also adds white circles when double-tapping on the game area.
|
||||
''';
|
||||
|
||||
@override
|
||||
Future<void> onLoad() async {
|
||||
children.register<DoubleTappableEmber>();
|
||||
}
|
||||
|
||||
@override
|
||||
void onGameResize(Vector2 canvasSize) {
|
||||
children
|
||||
.query<DoubleTappableEmber>()
|
||||
.forEach((element) => element.removeFromParent());
|
||||
add(DoubleTappableEmber(position: canvasSize / 2));
|
||||
|
||||
super.onGameResize(canvasSize);
|
||||
}
|
||||
|
||||
@override
|
||||
void onDoubleTapDown(DoubleTapDownEvent event) {
|
||||
add(
|
||||
CircleComponent(
|
||||
radius: 30,
|
||||
position: event.localPosition,
|
||||
anchor: Anchor.center,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class DoubleTappableEmber extends Ember with DoubleTapCallbacks {
|
||||
@override
|
||||
bool debugMode = true;
|
||||
|
||||
DoubleTappableEmber({Vector2? position})
|
||||
: super(
|
||||
position: position ?? Vector2.all(100),
|
||||
size: Vector2.all(100),
|
||||
);
|
||||
|
||||
@override
|
||||
void onDoubleTapUp(DoubleTapEvent event) {
|
||||
debugColor = Colors.greenAccent;
|
||||
}
|
||||
|
||||
@override
|
||||
void onDoubleTapCancel(DoubleTapCancelEvent event) {
|
||||
debugColor = Colors.red;
|
||||
}
|
||||
|
||||
@override
|
||||
void onDoubleTapDown(DoubleTapDownEvent event) {
|
||||
debugColor = Colors.blue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user