【问题标题】:Flutter: onTapDown function not always calledFlutter:onTapDown 函数并不总是被调用
【发布时间】:2020-05-16 10:42:36
【问题描述】:

我是 Flutter 开发的新手。如果我在屏幕上执行任何单击操作,我会添加 onTapdown 侦听器。它的工作,但问题是有时当我点击时,onTapdown 函数没有被调用。我不知道我做了什么问题。希望可以帮助我解决这个问题。提前谢谢。

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");
    }

  }

【问题讨论】:

  • 你的onTapDown函数有参数,为什么你调用的时候不传呢?

标签: flutter dart game-engine flame


【解决方案1】:

确保你使用了火焰 0.22.0^ 并使用这样创建你的游戏类:

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);
  }
}

另外,请记住,如果您只对它们调用 super,则不必覆盖 updateresizerender

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多