refactor!: Move CameraComponent and events out of experimental (#2505)

This moves the CameraComponent and the new event system out of experimental since this now is the recommended way of handling things.
This commit is contained in:
Lukas Klingsbo
2023-04-19 09:55:32 +02:00
committed by GitHub
parent 89926227c5
commit 87b8a067f3
67 changed files with 98 additions and 100 deletions

View File

@ -1,8 +1,9 @@
# Camera component
```{note}
This document describes a new experimental API. The more traditional approach
for handling a camera is described in [](camera_and_viewport.md).
This document describes a new camera API. The more traditional approach
(which will be deprecated) for handling a camera is described in
[](camera_and_viewport.md).
```
Camera-as-a-component is an alternative way of structuring a game, an approach

View File

@ -1,7 +1,7 @@
import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flutter/rendering.dart';

View File

@ -1,6 +1,6 @@
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/flame.dart';
class EmberPlayer extends SpriteAnimationComponent with TapCallbacks {

View File

@ -2,7 +2,7 @@ import 'dart:math';
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/rendering.dart';
const tau = 2 * pi;

View File

@ -1,6 +1,6 @@
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/rendering.dart';
import 'package:flutter/rendering.dart';

View File

@ -1,7 +1,7 @@
import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flutter/rendering.dart';

View File

@ -3,6 +3,7 @@ import 'dart:ui';
import 'package:doc_flame_examples/router.dart';
import 'package:flame/components.dart';
import 'package:flame/events.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';

View File

@ -1,5 +1,4 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';

View File

@ -1,7 +1,6 @@
import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';

View File

@ -2,7 +2,7 @@ import 'dart:math';
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import '../klondike_game.dart';
import '../pile.dart';

View File

@ -1,7 +1,7 @@
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import '../klondike_game.dart';
import '../pile.dart';

View File

@ -1,7 +1,6 @@
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';

View File

@ -1,6 +1,6 @@
import 'dart:ui';
import 'package:flame/experimental.dart';
import 'package:flame/components.dart';
import 'package:flame/extensions.dart';
import 'package:flame_forge2d/flame_forge2d.dart' hide Particle, World;
import 'package:flutter/material.dart' hide Image, Gradient;

View File

@ -1,9 +1,9 @@
import 'dart:math';
import 'package:collection/collection.dart';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/extensions.dart';
import 'package:flame/input.dart';
import 'package:flame_forge2d/flame_forge2d.dart' hide Particle, World;

View File

@ -2,7 +2,7 @@ import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame_isolate/flame_isolate.dart';

View File

@ -1,6 +1,6 @@
import 'package:examples/stories/bridge_libraries/forge2d/utils/balls.dart';
import 'package:examples/stories/bridge_libraries/forge2d/utils/boundaries.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/palette.dart';
import 'package:flame_forge2d/flame_forge2d.dart';

View File

@ -1,7 +1,7 @@
import 'dart:math';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/extensions.dart' show OffsetExtension;
import 'package:flame/game.dart';
import 'package:flame/input.dart';

View File

@ -1,7 +1,8 @@
import 'dart:ui';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart' hide Viewport;
class CameraComponentPropertiesExample extends FlameGame with TapCallbacks {

View File

@ -4,7 +4,7 @@ import 'package:examples/commons/ember.dart';
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';

View File

@ -2,7 +2,7 @@ import 'dart:math';
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame/palette.dart';

View File

@ -4,7 +4,6 @@ import 'package:examples/commons/ember.dart';
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/widgets.dart';
import 'package:flutter/material.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';

View File

@ -2,7 +2,7 @@ import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';

View File

@ -1,6 +1,6 @@
import 'package:examples/commons/ember.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';

View File

@ -1,5 +1,5 @@
import 'package:examples/commons/ember.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart' show Colors;

View File

@ -2,7 +2,7 @@ import 'dart:math';
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
enum ButtonState { unpressed, pressed }

View File

@ -1,7 +1,7 @@
import 'dart:math' as math;
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/palette.dart';
import 'package:flutter/material.dart';

View File

@ -0,0 +1,12 @@
export 'src/camera/behaviors/bounded_position_behavior.dart'
show BoundedPositionBehavior;
export 'src/camera/behaviors/follow_behavior.dart' show FollowBehavior;
export 'src/camera/camera_component.dart' show CameraComponent;
export 'src/camera/viewfinder.dart' show Viewfinder;
export 'src/camera/viewport.dart' show Viewport;
export 'src/camera/viewports/circular_viewport.dart' show CircularViewport;
export 'src/camera/viewports/fixed_aspect_ratio_viewport.dart'
show FixedAspectRatioViewport;
export 'src/camera/viewports/fixed_size_viewport.dart' show FixedSizeViewport;
export 'src/camera/viewports/max_viewport.dart' show MaxViewport;
export 'src/camera/world.dart' show World;

View File

@ -1,5 +1,7 @@
/// {@canonicalFor anchor.Anchor}
export 'src/anchor.dart';
export 'src/camera/camera_component.dart' show CameraComponent;
export 'src/camera/world.dart' show World;
export 'src/collisions/has_collision_detection.dart';
export 'src/collisions/hitboxes/screen_hitbox.dart';
export 'src/components/clip_component.dart';

View File

@ -1,3 +1,17 @@
export 'src/events/component_mixins/double_tap_callbacks.dart'
show DoubleTapCallbacks;
export 'src/events/component_mixins/drag_callbacks.dart' show DragCallbacks;
export 'src/events/component_mixins/tap_callbacks.dart' show TapCallbacks;
export 'src/events/flame_game_mixins/has_draggable_components.dart'
show
HasDraggableComponents; // ignore: deprecated_member_use_from_same_package
export 'src/events/flame_game_mixins/has_draggables_bridge.dart'
show HasDraggablesBridge; // ignore: deprecated_member_use_from_same_package
export 'src/events/flame_game_mixins/has_tappable_components.dart'
show
HasTappableComponents; // ignore: deprecated_member_use_from_same_package
export 'src/events/flame_game_mixins/has_tappables_bridge.dart'
show HasTappablesBridge; // ignore: deprecated_member_use_from_same_package
export 'src/events/game_mixins/multi_touch_drag_detector.dart'
show MultiTouchDragDetector;
export 'src/events/game_mixins/multi_touch_tap_detector.dart'
@ -6,6 +20,17 @@ export 'src/events/hardware_keyboard_detector.dart'
show HardwareKeyboardDetector;
export 'src/events/interfaces/multi_drag_listener.dart' show MultiDragListener;
export 'src/events/interfaces/multi_tap_listener.dart' show MultiTapListener;
export 'src/events/messages/double_tap_cancel_event.dart'
show DoubleTapCancelEvent;
export 'src/events/messages/double_tap_down_event.dart' show DoubleTapDownEvent;
export 'src/events/messages/double_tap_event.dart' show DoubleTapEvent;
export 'src/events/messages/drag_cancel_event.dart' show DragCancelEvent;
export 'src/events/messages/drag_end_event.dart' show DragEndEvent;
export 'src/events/messages/drag_start_event.dart' show DragStartEvent;
export 'src/events/messages/drag_update_event.dart' show DragUpdateEvent;
export 'src/events/messages/tap_cancel_event.dart' show TapCancelEvent;
export 'src/events/messages/tap_down_event.dart' show TapDownEvent;
export 'src/events/messages/tap_up_event.dart' show TapUpEvent;
export 'src/game/mixins/has_draggables.dart' show HasDraggables;
export 'src/game/mixins/has_hoverables.dart' show HasHoverables;
export 'src/game/mixins/has_tappables.dart' show HasTappables;

View File

@ -9,43 +9,6 @@
/// After the components lived here for some time, and when we gain more
/// confidence in their robustness, they will be moved out into the main Flame
/// library.
export 'src/camera/behaviors/bounded_position_behavior.dart'
show BoundedPositionBehavior;
export 'src/camera/behaviors/follow_behavior.dart' show FollowBehavior;
export 'src/camera/camera_component.dart' show CameraComponent;
export 'src/camera/viewfinder.dart' show Viewfinder;
export 'src/camera/viewport.dart' show Viewport;
export 'src/camera/viewports/circular_viewport.dart' show CircularViewport;
export 'src/camera/viewports/fixed_aspect_ratio_viewport.dart'
show FixedAspectRatioViewport;
export 'src/camera/viewports/fixed_size_viewport.dart' show FixedSizeViewport;
export 'src/camera/viewports/max_viewport.dart' show MaxViewport;
export 'src/camera/world.dart' show World;
export 'src/events/component_mixins/double_tap_callbacks.dart'
show DoubleTapCallbacks;
export 'src/events/component_mixins/drag_callbacks.dart' show DragCallbacks;
export 'src/events/component_mixins/tap_callbacks.dart' show TapCallbacks;
export 'src/events/flame_game_mixins/has_draggable_components.dart'
show
HasDraggableComponents; // ignore: deprecated_member_use_from_same_package
export 'src/events/flame_game_mixins/has_draggables_bridge.dart'
show HasDraggablesBridge; // ignore: deprecated_member_use_from_same_package
export 'src/events/flame_game_mixins/has_tappable_components.dart'
show
HasTappableComponents; // ignore: deprecated_member_use_from_same_package
export 'src/events/flame_game_mixins/has_tappables_bridge.dart'
show HasTappablesBridge; // ignore: deprecated_member_use_from_same_package
export 'src/events/messages/double_tap_cancel_event.dart'
show DoubleTapCancelEvent;
export 'src/events/messages/double_tap_down_event.dart' show DoubleTapDownEvent;
export 'src/events/messages/double_tap_event.dart' show DoubleTapEvent;
export 'src/events/messages/drag_cancel_event.dart' show DragCancelEvent;
export 'src/events/messages/drag_end_event.dart' show DragEndEvent;
export 'src/events/messages/drag_start_event.dart' show DragStartEvent;
export 'src/events/messages/drag_update_event.dart' show DragUpdateEvent;
export 'src/events/messages/tap_cancel_event.dart' show TapCancelEvent;
export 'src/events/messages/tap_down_event.dart' show TapDownEvent;
export 'src/events/messages/tap_up_event.dart' show TapUpEvent;
export 'src/experimental/fixed_integer_resolution_viewport.dart'
show FixedIntegerResolutionViewport;
export 'src/experimental/geometry/shapes/circle.dart' show Circle;

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:meta/meta.dart';
/// The [ButtonComponent] bundles two [PositionComponent]s, one that shows while

View File

@ -1,7 +1,7 @@
import 'dart:math';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/src/components/input/hud_margin_component.dart';
import 'package:meta/meta.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:meta/meta.dart';
enum ButtonState {

View File

@ -1,5 +1,4 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart' show CameraComponent;
import 'package:flame/game.dart';
import 'package:flutter/widgets.dart' show EdgeInsets;
import 'package:meta/meta.dart';

View File

@ -250,7 +250,7 @@ class PositionComponent extends Component
//#region Coordinate transformations
/// Test whether the `point` (given in global coordinates) lies within this
/// Test whether the `point` (given in local coordinates) lies within this
/// component. The top and the left borders of the component are inclusive,
/// while the bottom and the right borders are exclusive.
@override
@ -261,6 +261,9 @@ class PositionComponent extends Component
(point.y < _size.y);
}
/// Test whether the `point` (given in global coordinates) lies within this
/// component. The top and the left borders of the component are inclusive,
/// while the bottom and the right borders are exclusive.
@override
bool containsPoint(Vector2 point) {
return containsLocalPoint(absoluteToLocal(point));

View File

@ -1,8 +1,6 @@
import 'package:flame/experimental.dart';
import 'package:flame/src/components/core/component.dart';
import 'package:flame/components.dart';
import 'package:flame/src/events/messages/event.dart';
import 'package:meta/meta.dart';
import 'package:vector_math/vector_math_64.dart';
/// Base class for events that originate at some point on the screen. These
/// include: tap events, drag events, scale events, etc.

View File

@ -1,3 +1,4 @@
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/src/effects/provider_interfaces.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,8 +1,10 @@
import 'dart:math';
import 'dart:ui';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/extensions.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,9 +1,9 @@
import 'dart:ui';
import 'package:canvas_test/canvas_test.dart';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,7 +1,7 @@
import 'dart:ui';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,7 +1,7 @@
import 'dart:math';
import 'dart:ui';
import 'package:flame/experimental.dart';
import 'package:flame/camera.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vector_math/vector_math_64.dart';

View File

@ -1,7 +1,7 @@
import 'dart:ui';
import 'package:flame/camera.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,4 +1,4 @@
import 'package:flame/experimental.dart';
import 'package:flame/camera.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:vector_math/vector_math_64.dart';

View File

@ -1,6 +1,5 @@
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flame_test/flame_test.dart';
import 'package:test/test.dart';

View File

@ -1,6 +1,5 @@
import 'package:flame/collisions.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flame/image_composition.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/has_tappable_components.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,6 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -3,7 +3,6 @@ import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/double_tap_dispatcher.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/has_draggable_components.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/has_tappable_components.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,6 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/events.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/has_draggable_components.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -1,6 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/events.dart';
import 'package:flame/experimental.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/has_tappable_components.dart';
import 'package:flutter_test/flutter_test.dart';

View File

@ -2,7 +2,7 @@ import 'dart:ui';
import 'package:collection/collection.dart';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame/src/events/flame_game_mixins/has_tappable_components.dart';
import 'package:flame/src/game/game_render_box.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/widgets.dart';

View File

@ -1,6 +1,6 @@
import 'dart:ui';
import 'package:flame/components.dart';
import 'package:flame/components.dart' hide World;
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flame_forge2d/forge2d_game.dart';

View File

@ -1,5 +1,5 @@
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flutter/rendering.dart';

View File

@ -1,4 +1,4 @@
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame_rive/flame_rive.dart';
import 'package:flutter/material.dart';

View File

@ -1,7 +1,7 @@
import 'dart:async';
import 'package:flame/components.dart';
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flame/game.dart';
import 'package:flame_rive/flame_rive.dart';
import 'package:flame_test/flame_test.dart';

View File

@ -1,4 +1,4 @@
import 'package:flame/experimental.dart';
import 'package:flame/events.dart';
import 'package:flutter/gestures.dart';
TapDownEvent createTapDownEvents({