【Flutter】スプライトの衝突判定

class SampleGame extends FlameGame with HasCollisionDetection, HasKeyboardHandlerComponents {

  @override
  Color backgroundColor() => const Color(0xffCCCCFF);

  @override
  Future<void> onLoad() async {
    await super.onLoad();
    add(MySprite(Vector2(300, 300), true));
    add(MySprite(Vector2(100, 100), false));
  }
}

class MySprite extends CircleComponent with CollisionCallbacks, KeyboardHandler {
  var _size = 100.0;
  Vector2 _delta = Vector2.zero();
  late Color _color;
  late Vector2 _position;
  late bool _stay;

  MySprite(this._position, this._stay): super();

  @override
  Future<void> onLoad() async {
    await super.onLoad();
    _color = _stay ? Colors.green : Colors.red;
    size = Vector2(_size, _size);
    position = _position;
    setColor(_color);
    CircleHitbox hitbox = CircleHitbox();
    add(hitbox);
  }

  @override
  bool onKeyEvent(
      RawKeyEvent event,
      Set<LogicalKeyboardKey> keysPressed,
      )  {
    if (this._stay) { return false; }
    if (event is RawKeyUpEvent) {
      _delta = Vector2.zero();
    }
    if (event.character == 'j') {
      _delta.x = -1;
    }
    if (event.character == 'l') {
      _delta.x = 1;
    }
    if (event.character == 'i') {
      _delta.y = -1;
    }
    if (event.character == 'k') {
      _delta.y = 1;
    }
    return true;
  }

  @override
  void update(double delta){
    super.update(delta);
    position += _delta * delta * 100;
  }

  @override
  void onCollision(Set<Vector2> points, PositionComponent other) {
    setColor(Colors.yellow);
  }

  @override
  void onCollisionEnd(PositionComponent other){
    setColor(_color);
  }
}