Создание спрайтов в Dart: примеры с Flame и Rive

Чтобы создать спрайт с помощью языка Dart, вы можете использовать различные методы. Вот несколько примеров с фрагментами кода:

Метод 1: использование игрового движка Flame

Игровой движок Flame — популярный выбор для создания 2D-игр в Dart. Он обеспечивает простой и эффективный способ создания спрайтов. Вот пример того, как создать спрайт с помощью Flame:

import 'package:flame/components.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';
class MyGame extends FlameGame {
  late SpriteComponent sprite;
  @override
  Future<void> onLoad() async {
    final spriteImage = await images.load('sprite.png');
    sprite = SpriteComponent.fromImage(
      spriteImage,
      width: 100,
      height: 100,
    );
    add(sprite);
  }
}
void main() {
  runApp(
    MaterialApp(
      home: GameWidget(
        game: MyGame(),
      ),
    ),
  );
}

В этом примере мы импортируем необходимые пакеты и определяем класс MyGame, который расширяет FlameGame. Внутри метода onLoadмы загружаем изображение спрайта и создаем из него SpriteComponent. Устанавливаем ширину и высоту спрайта на 100 пикселей и добавляем его в игру. Наконец, мы запускаем игру, используя GameWidgetи runApp.

Метод 2: использование пакета Flutter Rive

Rive — мощный инструмент дизайна и анимации, который можно интегрировать в приложения Flutter. Он позволяет создавать и анимировать спрайты с помощью векторной графики. Вот пример использования пакета Rive для создания спрайта:

import 'package:flutter/material.dart';
import 'package:rive/rive.dart';
class MySprite extends StatefulWidget {
  @override
  _MySpriteState createState() => _MySpriteState();
}
class _MySpriteState extends State<MySprite> {
  late Artboard artboard;
  @override
  void initState() {
    super.initState();
    _loadRiveFile();
  }
  Future<void> _loadRiveFile() async {
    final bytes = await DefaultAssetBundle.of(context).load('assets/sprite.riv');
    final file = RiveFile();
    if (file.import(bytes)) {
      setState(() => artboard = file.mainArtboard..addController(SimpleAnimation('idle')));
    }
  }
  @override
  Widget build(BuildContext context) {
    return artboard != null ? Rive(artboard: artboard) : const SizedBox();
  }
}
void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        body: MySprite(),
      ),
    ),
  );
}

В этом примере мы импортируем необходимые пакеты и определяем виджет MySprite. Внутри состояния виджета мы загружаем файл Rive, содержащий анимацию спрайта, используя DefaultAssetBundle. Затем мы устанавливаем основной артборд в качестве текущего и добавляем к нему контроллер анимации. Наконец, мы отображаем анимацию спрайта с помощью виджета Rive.