docs

TOP(About this memo)) > Flutter > 一覧(Flame) > PositionComponent

PositionComponent

ShapeComponents

@override
Future<void> onLoad() async {
    add(RectangleComponent(size: Vector2(10, 10)));
}

ParallaxComponent

イメージ、Sprite、Animation

SpriteComponent

@override
Future<void> onLoad() async {
    add(SpriteComponent(sprite: await game.loadSprite('xxx/yyy.png'), anchor: Anchor.center, size: Vector2.all(128.0), position: Vector2(10, 20), angle:pi/2));
}

SpriteAnimationComponent

TODO

TextComponent

final p = TextPaint(
      style: const TextStyle(
        fontSize: 32,
        color: Colors.white,
      ),
    );
final pSize = p.toTextPainter('Test').size;
print(pSize);
TextComponent(text: 'Test', textRenderer: p);

ButtonComponent

import 'dart:async';

import 'package:flame/components.dart';
import 'package:flame/game.dart';
import 'package:flame/input.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(
    SafeArea(child: GameWidget(game: TextExample())),
  );
}

class TextExample extends FlameGame {
  TextExample() {
    debugMode = true;
  }
  static final textPaint = TextPaint(
    style: const TextStyle(
      fontSize: 32,
      color: Colors.white,
    ),
  );

  @override
  Future<void> onLoad() async {
    add(Child(position: Vector2(size.x / 2, size.y / 2)));

    // buttonを引数として渡さない場合
    add(_MyButton(
      onPressed: () {
        removeAll(children);
      },
    ));

    // buttonを引数として渡す場合
    // こちらはsizeがコンストラクタ(Initializer)にて設定される
    add(ButtonComponent(
      position: Vector2(size.x / 2, 0),
      button:
          TextComponent(text: 'Remove2', textRenderer: TextExample.textPaint),
      buttonDown: TextComponent(
          text: 'Remove2',
          textRenderer: TextExample.textPaint
              .copyWith((style) => style.copyWith(color: Colors.black))),
      onPressed: () {
        removeAll(children);
      },
    ));
  }
}

class _MyButton extends ButtonComponent {
  _MyButton({super.onPressed});

  @override
  FutureOr<void> onLoad() {
    button =
        TextComponent(text: 'Remove1', textRenderer: TextExample.textPaint);
    buttonDown = TextComponent(
        text: 'Remove1',
        textRenderer: TextExample.textPaint
            .copyWith((style) => style.copyWith(color: Colors.black)));

    // sizeを設定しないとsizeがゼロの状態のためボタンが反応しない
    //size = button!.size;
  }
}

class Child extends SpriteComponent {
  Child({super.position, super.key})
      : super(
          size: Vector2.all(100),
          anchor: Anchor.center,
        );

  @override
  Future<void> onLoad() async {
    sprite = await Sprite.load('flame.png');
  }
}

その他のPositionComponent派生クラス