Flutter游戏开发插件bonfiremodify的使用

Flutter游戏开发插件bonfiremodify的使用

Powered by Flame Flutter MIT Licence pub package pub points bonfire

Bonfire

使用 Flame引擎 构建RPG游戏!

Bonfire 适用于从以下视角构建游戏:

在线试用我们的 DEMO

文档

更多信息和 示例 可在 文档 中查看。

致谢

  • 整个 Flame引擎 团队。
  • 感谢所有贡献者和曾经的贡献者。

支持我的工作

buymeacoffee

贡献

如果您发现任何错误或希望添加改进,可以打开一个issue或开发修复并提交pull请求。感谢您的合作!

文档仓库


示例代码

import 'package:bonfiremodify/bonfire.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

import 'manual_map/game_manual_map.dart';
import 'shared/enemy/goblin_controller.dart';
import 'shared/interface/bar_life_controller.dart';
import 'shared/npc/critter/critter_controller.dart';
import 'shared/player/knight_controller.dart';
import 'simple_example/simple_example_game.dart';
import 'tiled_map/game_tiled_map.dart';
import 'top_down_game/top_down_game.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  if (!kIsWeb) {
    await Flame.device.setLandscape();
    await Flame.device.fullScreen();
  }

  // 注入控制器到依赖注入器中
  BonfireInjector().put((i) => KnightController());
  BonfireInjector().putFactory((i) => GoblinController());
  BonfireInjector().putFactory((i) => CritterController());
  BonfireInjector().put((i) => BarLifeController());

  runApp(
    MaterialApp(
      home: Menu(),
    ),
  );
}

// 主菜单界面
class Menu extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.cyan[900],
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text(
              'Bonfire',
              style: TextStyle(fontSize: 30, color: Colors.white),
            ),
            SizedBox(
              height: 30,
            ),
            SizedBox(
              width: 200,
              child: ElevatedButton(
                style: ButtonStyle(
                  shape: MaterialStateProperty.all(
                    RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                  ),
                ),
                child: Text('简单示例'),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                        builder: (context) => SimpleExampleGame()),
                  );
                },
              ),
            ),
            SizedBox(
              height: 10,
            ),
            SizedBox(
              width: 200,
              child: ElevatedButton(
                style: ButtonStyle(
                  shape: MaterialStateProperty.all(
                    RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                  ),
                ),
                child: Text('手动地图'),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => GameManualMap()),
                  );
                },
              ),
            ),
            SizedBox(
              height: 10,
            ),
            SizedBox(
              width: 200,
              child: ElevatedButton(
                style: ButtonStyle(
                  shape: MaterialStateProperty.all(
                    RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                  ),
                ),
                child: Text('Tiled地图'),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => GameTiledMap(),
                    ),
                  );
                },
              ),
            ),
            SizedBox(
              height: 10,
            ),
            SizedBox(
              width: 200,
              child: ElevatedButton(
                style: ButtonStyle(
                  shape: MaterialStateProperty.all(
                    RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(20),
                    ),
                  ),
                ),
                child: Text('顶视角游戏'),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => TopDownGame(),
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
      bottomNavigationBar: Container(
        height: 40,
        child: Center(
          child: Text(
            '键盘:方向键和空格键攻击',
            style: TextStyle(fontSize: 18),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter游戏开发插件bonfiremodify的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter游戏开发插件bonfiremodify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是关于如何在Flutter游戏开发中使用bonfire_modify插件的一个简单代码案例。bonfire_modify是一个扩展自bonfire的Flutter插件,用于简化游戏开发中的一些常见任务。请注意,bonfire_modify并不是官方或广泛认可的插件,因此这里的代码假设你已经有一个基本的Flutter和bonfire环境设置。

首先,确保你已经在pubspec.yaml文件中添加了必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  bonfire: ^x.y.z  # 请替换为最新版本号
  bonfire_modify: ^a.b.c  # 假设这是存在的版本号,实际使用时请检查pub.dev

然后,运行flutter pub get来安装这些依赖。

接下来,我们来看一个简单的代码示例,展示如何使用bonfire_modify(假设它提供了某些有用的功能,比如简化的敌人生成或地图加载)。由于bonfire_modify的具体API和功能未知,我将基于假设的功能来编写代码。

import 'package:flutter/material.dart';
import 'package:bonfire/bonfire.dart';
import 'package:bonfire_modify/bonfire_modify.dart'; // 假设这是插件的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Bonfire Modify Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bonfire Modify Example'),
        ),
        body: GameWidget(),
      ),
    );
  }
}

class GameWidget extends StatefulWidget {
  @override
  _GameWidgetState createState() => _GameWidgetState();
}

class _GameWidgetState extends State<GameWidget> with TickerProviderStateMixin {
  late GameRef gameRef;

  @override
  void initState() {
    super.initState();
    gameRef = GameRef(
      // 初始化Bonfire游戏引擎
      viewport: CustomViewport(),
      size: Size(double.infinity, double.infinity),
    );

    // 使用bonfire_modify来简化游戏设置
    setupGameWithBonfireModify(gameRef);

    // 开始游戏循环
    gameRef.game.onGameReady.add(() {
      gameRef.game.start();
    });
  }

  void setupGameWithBonfireModify(GameRef gameRef) {
    // 假设bonfire_modify提供了一个简化的敌人生成方法
    final player = Player(
      position: Position(100, 100),
      width: 64,
      height: 64,
    );

    gameRef.game.add(player);

    // 使用bonfire_modify的简化方法生成敌人
    generateEnemiesWithBonfireModify(gameRef, 5); // 生成5个敌人

    // 假设bonfire_modify还提供了一个简化的地图加载方法
    loadMapWithBonfireModify(gameRef, 'assets/maps/my_map.tmx');
  }

  // 假设的方法,因为bonfire_modify的实际API未知
  void generateEnemiesWithBonfireModify(GameRef gameRef, int count) {
    for (int i = 0; i < count; i++) {
      final enemy = Enemy(
        position: Position(Random().nextInt(gameRef.size.width), Random().nextInt(gameRef.size.height)),
        width: 32,
        height: 32,
      );
      gameRef.game.add(enemy);
    }
  }

  // 假设的方法,因为bonfire_modify的实际API未知
  void loadMapWithBonfireModify(GameRef gameRef, String mapPath) {
    // 这里应该有一个bonfire_modify提供的方法来简化地图加载
    // 但由于API未知,这里仅作为示例,实际应使用插件提供的方法
    // 例如: gameRef.game.map = await BonfireTiledMap.load(mapPath);
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        // 游戏画布
        Positioned.fill(
          child: GameWidgetCustomPaint(
            gameRef: gameRef,
          ),
        ),
      ],
    );
  }
}

// 自定义的GameWidgetCustomPaint,用于将Bonfire游戏渲染到屏幕上
class GameWidgetCustomPaint extends StatelessWidget {
  final GameRef gameRef;

  GameWidgetCustomPaint({required this.gameRef});

  @override
  Widget build(BuildContext context) {
    return CustomPaint(
      painter: GamePainter(gameRef),
      size: Size.infinite,
    );
  }
}

// 自定义的GamePainter,用于绘制游戏
class GamePainter extends CustomPainter {
  final GameRef gameRef;

  GamePainter({required this.gameRef});

  @override
  void paint(Canvas canvas, Size size) {
    gameRef.game.render(canvas);
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return true; // 根据需要调整,这里为了简单起见总是重绘
  }
}

注意:上述代码是基于假设的bonfire_modify插件功能编写的,实际使用时需要根据bonfire_modify的API文档进行调整。如果bonfire_modify提供了特定的方法或类来简化敌人生成、地图加载等功能,你应该使用那些方法而不是上面的假设方法。

由于bonfire_modify并非一个广泛认可的插件,你可能需要查阅其官方文档或源代码来了解其实际提供的API和功能。如果bonfire_modify不存在或API与假设不同,请考虑使用bonfire插件本身提供的功能来开发你的游戏。

回到顶部