Files
flame/examples/lib/stories/input/hover_callbacks_example.dart
Luan Nico 39edc70206 docs: Fix Hover Callbacks so the tap used in the example respects the zoom (#2874)
Fix Hover Callbacks so the tap used in the example respects the zoom.

The example happens to use a tap event to create new squares. However,
since the tap event is bound to the Game instead of the World, had it
had any zoom applied (which it didn't), or any other camera transform,
the squares would have been created on the wrong place. This sends a bad
example to new users and can cause confusion.
2023-11-26 18:26:00 +01:00

51 lines
1.4 KiB
Dart

import 'package:flame/components.dart';
import 'package:flame/events.dart';
import 'package:flame/extensions.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';
class HoverCallbacksExample extends FlameGame {
static const String description = '''
This example shows how to use `HoverCallbacks`s.\n\n
Add more squares by clicking and hover them to change their color.
''';
HoverCallbacksExample() : super(world: HoverCallbacksWorld());
@override
Future<void> onLoad() async {
camera.viewfinder.anchor = Anchor.topLeft;
camera.viewfinder.zoom = 1.5;
}
}
class HoverCallbacksWorld extends World with TapCallbacks {
@override
Future<void> onLoad() async {
add(HoverSquare(Vector2(200, 500)));
add(HoverSquare(Vector2(700, 300)));
}
@override
void onTapDown(TapDownEvent event) {
add(HoverSquare(event.localPosition));
}
}
class HoverSquare extends PositionComponent with HoverCallbacks {
static final Paint _white = Paint()..color = const Color(0xFFFFFFFF);
static final Paint _grey = Paint()..color = const Color(0xFFA5A5A5);
HoverSquare(Vector2 position)
: super(
position: position,
size: Vector2.all(100),
anchor: Anchor.center,
);
@override
void render(Canvas canvas) {
canvas.drawRect(size.toRect(), isHovered ? _grey : _white);
}
}