Lorsque votre jeu a besoin de réagir des gestes comme le Drag, Zoom, etc sur plusieurs plateformes, vous pouvez avoir besoin d’ajouter le mixin MultiTouchDragDetector à votre Component FlameGame.
L’inconvénient est que le DragCallback sur d’autres Components ne fonctionnera plus car les événements sont interceptés par le MultiTouchDragDetector.
Bien que cela puisse être résolu dans un prochain PR, il y a un moyen de transmettre manuellement les événements en ajoutant une ligne de code :
class MyGame extends FlameGame with MultiTouchDragDetector {
@override
void onDragStart(int pointerId, DragStartInfo info) {
// ignore: invalid_use_of_internal_member
findByKey<MultiDragDispatcher>(const MultiDragDispatcherKey())?.handleDragStart(pointerId, info.raw);
}
@override
void onDragUpdate(int pointerId, DragUpdateInfo info) {
// ignore: invalid_use_of_internal_member
findByKey<MultiDragDispatcher>(const MultiDragDispatcherKey())?.handleDragUpdate(pointerId, info.raw);
}
@override
void onDragEnd(int pointerId, DragEndInfo info) {
// ignore: invalid_use_of_internal_member
findByKey<MultiDragDispatcher>(const MultiDragDispatcherKey())?.handleDragEnd(pointerId, info.raw);
}
@override
void onDragCancel(int pointerId) {
// ignore: invalid_use_of_internal_member
findByKey<MultiDragDispatcher>(const MultiDragDispatcherKey())?.handleDragCancel(pointerId);
}
}
Comme la fonction utilisée est interne à la bibliothèque, vous devez ajouter un lint ignore.
Vous pouvez également exécuter du code supplémentaire à l’intérieur de ces DragEvents.