スクリーンヒットボックス

2023-05-13

ScreenHitbox

ゲームにScreenHitboxを追加すると、画面の周囲に当たり判定を追加できます。

たとえば壁に当たったら消すなどの処理を実装するのに便利です。

公式ドキュメント https://docs.flame-engine.org/latest/flame/collision_detection.html#screenhitbox
APIリファレンス https://pub.dev/documentation/flame/latest/collisions/ScreenHitbox-class.html

動かす

ゲームのonLoadScreenHitboxを設定します。

  @override
  Future<void> onLoad() async {
    super.onLoad();

    await add(ScreenHitbox());
  }

タップしたらランダムに動くボールを追加します。

  @override
  void onTapDown(TapDownEvent event) async {
    super.onTapDown(event);

    add(
      Ball(
        position: event.localPosition,
        vx: _random.nextDouble() * 200 - 100,
        vy: _random.nextDouble() * 200 - 100,
      ),
    );
  }

BallではonCollisionScreenHitboxに当たったら止まって色を変えます。

class Ball extends CircleComponent with CollisionCallbacks {
  Ball({super.position, required this.vx, required this.vy})
      : super(radius: 10);

  double vx;
  double vy;

  @override
  Future<void> onLoad() async {
    super.onLoad();
    add(CircleHitbox());
  }

  @override
  void update(double dt) {
    super.update(dt);

    position += Vector2(vx, vy) * dt;
  }

  @override
  void onCollision(Set<Vector2> intersectionPoints, PositionComponent other) {
    super.onCollision(intersectionPoints, other);

    if (other is ScreenHitbox) {
      paint = BasicPalette.gray.paint();
      vx = 0;
      vy = 0;
    }
  }
}

このように画面の周囲に当たり判定を追加できます。

© 2023 tnantoka