Flutter: onTapDown function not always called

827

Make sure you use flame 0.22.0^ and use create your game class like this instead:

class MyGame extends BaseGame with TapDetector {
  Squres game;

  MyGame() {    
    final images = [
      ParallaxImage("space/bg_base.png",repeat: ImageRepeat.repeat,fill: LayerFill.height),
      ParallaxImage("space/bg_big_star.png",repeat: ImageRepeat.repeatY,fill: LayerFill.height),
      ParallaxImage("space/bg_planet.png",repeat: ImageRepeat.repeat,fill: LayerFill.none),
    ];
    game = Squres(images);

    add(game);
  }

  @override
  void onTapDown(TapUpDetails details) {
    print("trigger");
    game.onTapDown(details);
  }
}

Also, remember that you don't have to override update, resize and render if you only call super on them.

Share:
827
khoi
Author by

khoi

Updated on November 25, 2022

Comments

  • khoi
    khoi over 1 year

    I'm new in flutter development. I add onTapdown listener if i perform any clicked action on the screen. It's worked,but the problem is sometime when i clicked,onTapdown function not get called.I don't know what problem i have done.Hope can help me solve this problem.Thank you in advance.

    import 'package:flame/game.dart';
    import 'package:flame/components/parallax_component.dart';
    import 'package:flame/util.dart';
    import 'package:flutter/gestures.dart';
    import 'package:flutter/material.dart';
    
    void main() async {
        WidgetsFlutterBinding.ensureInitialized();
        Util flameUtil = Util();
    
      await flameUtil.fullScreen();
      runApp(MyGame(flameUtil).widget);
    }
    
    class MyGame extends BaseGame {
      MyGame(Util flameUtil) {
    
        final images = [
    
          ParallaxImage("space/bg_base.png",repeat: ImageRepeat.repeat,fill: LayerFill.height),
          ParallaxImage("space/bg_big_star.png",repeat: ImageRepeat.repeatY,fill: LayerFill.height),
          ParallaxImage("space/bg_planet.png",repeat: ImageRepeat.repeat,fill: LayerFill.none),
    
        ];
    
        var game = Squres(images);
    
        add(game);
    
        TapGestureRecognizer tapper = TapGestureRecognizer();
        tapper.onTapDown = game.onTapDown;
        flameUtil.addGestureRecognizer(tapper);
      }
    }
    
    class Squres extends ParallaxComponent{
    
        Squres(List<ParallaxImage> images) : super(images){
          baseSpeed = const Offset(4,0);
          layerDelta = const Offset(0,-50);
        }
    
        @override
        void render(Canvas canvas) {    
          super.render(canvas);
        }
    
        @override
        void resize(Size size) {
          super.resize(size);
        }
    
        @override
        void update(double t) {
          super.update(t);
        }
    
        //not always trigger
        void onTapDown(TapDownDetails tap){
            print("trigger");
        }
    
      }
    
    • CarlosSR
      CarlosSR almost 4 years
      your onTapDown function has a parameter, why aren't you passing any when you are calling it?