0

炎と羽ばたきを使ってフラッピー バード ゲームを再現しようとしていますが、問題が発生し、誰か助けてくれるかどうか疑問に思っていました。

問題は、onTap メソッドが機能していないことです。これは私のコードです:

const COLOR = const Color(0xFF75DA8B);
const SIZE = 52.0;
const GRAVITY = 400.0;
const BOOST = -380.0;

void main() async{
  WidgetsFlutterBinding.ensureInitialized ();
  final size = await Flame.util.initialDimensions();
  final game = MyGame(size);
  runApp(game.widget);
}

class Bg extends Component with Resizable{
  static final Paint _paint = Paint()..color = COLOR;
  @override
  void render(Canvas c) {
    c.drawRect(Rect.fromLTWH(0.0, 0.0, size.width, size.height), _paint);
  }

  @override
  void update(double t) {
  }

}


class Bird extends AnimationComponent with Resizable{
  double speedY = 0.0;
  bool frozen;
  Bird () : super.sequenced(SIZE, SIZE, 'bird.png', 4, textureWidth: 16.0, textureHeight: 16.0) {
    this.anchor = Anchor.center;
  }

  Position get velocity => Position (300.0, speedY);


  reset () {
    this.x = size.width/ 2;
    this.y = size.height/2;
    speedY = 0;
    frozen = true;
    angle = 0.0;
  }

  @override
  void resize(Size size) {
    super.resize(size);
    reset();
  }

  @override
  void update(double t) {
  super.update(t);
    if (frozen) return;
    this.y += speedY * t - GRAVITY * t * t / 2;
    this.speedY += GRAVITY * t;
    this.angle = velocity.angle();
    if (y > size.height) {
      reset();
    }
  }
  onTap () {
    if (frozen) {
      frozen = false;
      return;
    }
    speedY = (speedY + BOOST).clamp(BOOST, speedY);
  }

}


class MyGame extends BaseGame {

  Bird bird;
  MyGame (Size size){
    add(Bg());
    add(bird = Bird());
  }
  @override
  void onTap() {
    bird.onTap();
  }
}

鳥は静的なままで、コード行にコメントすると:

(冷凍) リターンの場合。更新メソッドで、それは落ちますが、ontap は機能しません。

理由がわかりますか?

よろしくお願いします。

4

1 に答える 1