Flutter游戏开发基础插件based_of_eng_game的使用

Flutter游戏开发基础插件based_of_eng_game的使用

欢迎来到基于Flutter的游戏开发基础插件based_of_eng_game!该插件为游戏开发提供了广泛的工具和实用程序,以增强游戏开发和游戏体验。

开始使用

要开始使用based_of_eng_game插件,请按照以下步骤操作:

安装

  1. 在你的pubspec.yaml文件中添加插件依赖:

    dependencies:
      based_of_eng_game: ^最新版本
    
  2. 运行命令安装插件:

    dart pub get
    
  3. 在Dart代码中导入插件:

    import 'package:based_of_eng_game/based_of_eng_game.dart';
    

重要警告

⚠️ 警告: 如果在示例项目中添加了新的资源,请确保更新主项目代码中的资源引用。否则可能导致游戏中加载缺失或错误的资源。


完整示例Demo

下面是一个完整的示例Demo,展示了如何使用based_of_eng_game插件进行游戏开发。

import 'package:based_of_eng_game/based_of_eng_game.dart'; // 导入插件
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'injection/injection_container.dart' as di;

import 'bloc/contact_lesson_bloc.dart';

// 主函数
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 初始化Flutter绑定
  await di.init(); // 初始化依赖注入容器

  runApp(const MyApp()); // 运行应用
}

// 应用根组件
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo', // 应用标题
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), // 颜色方案
        useMaterial3: true, // 使用Material 3设计
      ),
      home: ScreenUtilInit(
        designSize: const Size(360, 690), // 设计尺寸
        minTextAdapt: true, // 最小文本适应
        splitScreenMode: true, // 分屏模式
        builder: (_, child) {
          return BlocProvider<ContactLessonBloc>( // 提供Bloc
            create: (_) => di.sl<ContactLessonBloc>() // 创建Bloc实例
              ..add(GetContactLessonRequest(lessonId: 5, gameId: 1708)), // 添加请求
            child: BlocConsumer<ContactLessonBloc, ContactLessonState>( // 消费Bloc状态
              listener: (context, state) {
                // 监听状态变化
                if (state is GetContactErrorInitial) {
                  debugPrint('state.message:${state.message}');
                } else if (state is LogOutLoadingState) {
                  Navigator.of(context).pop();
                } else if (state is GetContactInitial) {
                  MainDataOfChapters? dataType = state.getMainContactData(index: 0);

                  debugPrint('dataType:$dataType');
                }
              },
              builder: (context, stateOfGameData) {
                if (stateOfGameData is GetContactInitial) {
                  return MainScreenOfGames(
                    stateOfGameData: stateOfGameData.data,
                    dataOfBasesGame: stateOfGameData.getMainContactData(index: 0),
                    actionOfCompleteGame: (int countOfStars) {
                      List<int> listOfIds = stateOfGameData.data
                          .map((game) => game.id ?? 0)
                          .toList();
                      debugPrint('#########################################');
                      debugPrint('the stars send: $listOfIds , $countOfStars');
                      debugPrint('#########################################');
                    },
                    showTheEditedGames: false,
                    backButton: () {
                      debugPrint('backButton#########################################');
                      Navigator.of(context).pop();
                      Navigator.of(context).pop();
                    },
                  );
                } else {
                  return const CircularProgressIndicator(); // 显示加载指示器
                }
              },
            ),
          );
        },
      ),
    );
  }
}

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

1 回复

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


based_of_eng_game 是一个用于 Flutter 游戏开发的基础插件,旨在简化游戏开发的流程,提供一些常用的游戏开发功能。以下是如何使用 based_of_eng_game 插件的基础指南。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 based_of_eng_game 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  based_of_eng_game: ^1.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来安装插件。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:based_of_eng_game/based_of_eng_game.dart';

3. 初始化游戏引擎

based_of_eng_game 提供了一个 GameEngine 类,用于管理游戏的主循环和渲染。你可以通过继承 GameEngine 来创建自己的游戏。

class MyGame extends GameEngine {
  MyGame() : super();

  [@override](/user/override)
  void initialize() {
    // 初始化游戏资源
  }

  [@override](/user/override)
  void update(double deltaTime) {
    // 更新游戏逻辑
  }

  [@override](/user/override)
  void render(Canvas canvas) {
    // 渲染游戏画面
  }
}

4. 启动游戏

main.dart 中启动你的游戏:

void main() {
  runApp(GameWidget(game: MyGame()));
}

GameWidget 是一个用于将游戏嵌入到 Flutter 应用中的小部件。

5. 处理用户输入

based_of_eng_game 提供了简单的方式来处理用户输入。你可以覆盖 onTapDown, onTapUp, onTapCancel 等方法来处理触摸事件。

class MyGame extends GameEngine {
  MyGame() : super();

  [@override](/user/override)
  void initialize() {
    // 初始化游戏资源
  }

  [@override](/user/override)
  void update(double deltaTime) {
    // 更新游戏逻辑
  }

  [@override](/user/override)
  void render(Canvas canvas) {
    // 渲染游戏画面
  }

  [@override](/user/override)
  void onTapDown(TapDownDetails details) {
    // 处理触摸按下事件
  }

  [@override](/user/override)
  void onTapUp(TapUpDetails details) {
    // 处理触摸抬起事件
  }
}

6. 添加游戏对象

你可以通过继承 GameObject 类来创建游戏中的对象,并在 GameEngine 中管理和渲染它们。

class Player extends GameObject {
  Player() : super();

  [@override](/user/override)
  void update(double deltaTime) {
    // 更新玩家逻辑
  }

  [@override](/user/override)
  void render(Canvas canvas) {
    // 渲染玩家
  }
}

GameEngine 中添加和管理游戏对象:

class MyGame extends GameEngine {
  Player player = Player();

  [@override](/user/override)
  void initialize() {
    addGameObject(player);
  }

  [@override](/user/override)
  void update(double deltaTime) {
    super.update(deltaTime);
    // 更新游戏逻辑
  }
}

7. 处理碰撞检测

based_of_eng_game 提供了一些基础的碰撞检测功能。你可以通过 checkCollision 方法来检测两个游戏对象是否发生碰撞。

class MyGame extends GameEngine {
  Player player = Player();
  Enemy enemy = Enemy();

  [@override](/user/override)
  void initialize() {
    addGameObject(player);
    addGameObject(enemy);
  }

  [@override](/user/override)
  void update(double deltaTime) {
    super.update(deltaTime);

    if (checkCollision(player, enemy)) {
      // 处理碰撞
    }
  }
}

8. 添加音效和音乐

based_of_eng_game 还提供了简单的音效和音乐播放功能。你可以使用 playSoundplayMusic 方法来播放音效和背景音乐。

class MyGame extends GameEngine {
  [@override](/user/override)
  void initialize() {
    playMusic('assets/music/background.mp3', loop: true);
  }

  [@override](/user/override)
  void onTapDown(TapDownDetails details) {
    playSound('assets/sounds/tap.mp3');
  }
}

9. 优化和调试

based_of_eng_game 提供了一些调试工具,如 showFPS,用于显示游戏的帧率。

class MyGame extends GameEngine {
  [@override](/user/override)
  void initialize() {
    showFPS(true);
  }
}
回到顶部