Flutter未知功能探索插件illume的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter未知功能探索插件illume的使用

illume

illume 是是一个简单的Flutter游戏引擎,它使用Widget来构建游戏对象,而不是在正常的游戏引擎中使用的Sprite。这使得应用程序和游戏部分可以相当整合,并且可以使用很多共同组件而不需要图形工作来创建Sprite和背景(这是我的主要动机,因为我对图形设计一无所知)。它也非常容易创建和管理游戏状态,如下面的功能所示。许多功能仍然需要实现,包括物理 - 目前只实现了普通的盒子碰撞。

一些部分受到了其他游戏引擎的启发,主要是Flame

免责声明: 由于Widget比在画布上绘制的Sprite更重,这个引擎将比其他引擎表现得更差。它还处于非常早期的阶段,我计划添加很多功能,但这主要是由于我对基于Widget的游戏引擎的兴趣——任何严肃的游戏开发都应该使用更成熟的引擎,例如[Flame]。这只是为了满足我的好奇心。我很喜欢,并且仍然大量使用那些我非常尊重的主Flutter游戏引擎。

功能

使用Widget直接构建游戏对象
class FlappyWidget extends GameObject {
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.blue,
      child: const Text('Demo'),
    );
  }

  @override
  void init() {}

  @override
  void onCollision(List<Collision> collisions) { }

  @override
  void onScreenSizeChange(Vector2 size) {}

  @override
  void update(Duration delta) {}
}
容易的游戏开发,无需大型分离
class _MyHomePageState extends State&lt;MyHomePage&gt; {
  IllumeController gameController = IllumeController();

  FlappyWidget flappyWidget = FlappyWidget();

  @override
  void initState() {
    super.initState();
    gameController.startGame();
    gameController.gameObjects.add(flappyWidget);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Illume(
        illumeController: gameController,
      ),
    );
  }
}

// 定义游戏对象
IllumeController允许轻松操作游戏状态
IllumeController gameController = IllumeController();

gameController.startGame();
gameController.gameObjects.add(DemoObject());
gameController.stopGame();
碰撞检测

碰撞检测默认启用,所有对象都可以关闭。每个对象都会通知碰撞以及交集的Rect,以便更好地理解碰撞。这是一个非常早期的原型,目前没有复杂的物理(Box2ish),但我希望将来添加这些功能。

class FlappyWidget extends GameObject {

  //...

  @override
  void onCollision(List&lt;Collision&gt; collisions) { 
    // 这个会给出与这个对象碰撞的所有对象列表,以及交集的Rect。
  }

  //...
}
触摸手势检测

触摸手势检测不是illume的功能,我们可以使用默认的Flutter手势检测Widget,如GestureDetector来驱动我们的应用。查看仓库中的示例以获取更多信息,这里有一个简短的演示:

@override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        flappyWidget.jump();
      },
      child: Scaffold(
        appBar: AppBar(
          title: Text('Illume Demo'),
        ),
        body: Illume(
          illumeController: gameController,
        ),
      ),
    );
  }

使用

第一步

添加依赖项:

dependencies:
  illume: ^0.1.0
第二步

添加Illume widget 和关联的IllumeController到你需要创建游戏的地方:

IllumeController gameController = IllumeController();

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Illume Demo'),
      ),
      body: Illume(
        illumeController: gameController,
      ),
    );
  }
第三步

定义你的GameObject通过扩展类:

class FlappyWidget extends GameObject {
  var velocity = 0.0;
  var acceleration = 0.2;

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.blue,
      child: const Text('Demo'),
    );
  }

  @override
  void init() {
    size = Vector.all(50);
    alignment = GameObjectAlignment.center;
    position = (gameSize / 2);
  }

  @override
  void onCollision(List&lt;Collision&gt; collisions) {
    illumeController.stopGame();
  }

  @override
  void onScreenSizeChange(Vector2 size) {
    // 这是一个快速的演示,但在实际的应用程序中你应该移动位置或至少锁定方向。
  }

  @override
  void update(Duration delta) {
    position += Vector(0, velocity);
    velocity = velocity + acceleration;
  }

  void jump() {
    velocity = -5;
  }
}
第四步

将对象添加到游戏中并启动游戏:

  FlappyWidget flappyWidget = FlappyWidget();

  @override
  void initState() {
    super.initState();
    gameController.startGame();
    gameController.gameObjects.addAll([flappyWidget]);
  }

检查完整的示例以获取演示的Flappy Bird游戏(这是一个非常基础的演示,我稍后会添加一个更好的版本)。


示例代码


更多关于Flutter未知功能探索插件illume的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter未知功能探索插件illume的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,illume插件可能并不是一个广为人知的官方或主流插件,因此具体的用法和功能可能需要根据该插件的官方文档或其源代码进行深入探索。不过,基于一般的Flutter插件使用流程,我可以给你一个基础的代码示例框架,用于展示如何集成和使用一个假设的Flutter插件(在这个例子中是illume)。请注意,由于illume的具体功能未知,以下代码仅为示例性质。

首先,确保你已经在pubspec.yaml文件中添加了illume插件的依赖(假设它存在于pub.dev上或者是一个本地插件):

dependencies:
  flutter:
    sdk: flutter
  illume: ^x.y.z  # 替换为实际的版本号,如果存在于pub.dev

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

接下来,在你的Flutter项目中,你可以按照以下方式使用illume插件(假设它提供了一些功能):

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Illume Plugin Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 假设illume插件有一个名为initialize的方法用于初始化
  Illume? _illume;

  @override
  void initState() {
    super.initState();
    // 初始化illume插件
    _initializeIllume();
  }

  Future<void> _initializeIllume() async {
    // 假设插件有一个静态方法进行初始化
    _illume = await Illume.initialize();

    // 可以在这里添加插件初始化成功后的逻辑
    // 例如,调用插件提供的其他功能
    if (_illume != null) {
      // 示例:假设illume有一个名为someFeature的方法
      _illume!.someFeature().then((result) {
        // 处理结果
        print('Illume feature result: $result');
      }).catchError((error) {
        // 处理错误
        print('Error using Illume feature: $error');
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Illume Plugin Demo'),
      ),
      body: Center(
        child: Text('Waiting for Illume to initialize...'),
      ),
    );
  }
}

请注意,上面的代码是一个假设性的示例,因为illume插件的具体API和功能未知。在实际使用中,你需要参考illume插件的官方文档或源代码来了解如何正确初始化和使用该插件。

如果illume是一个本地插件或者不在pub.dev上,你可能需要手动将插件代码添加到你的Flutter项目中,并按照插件作者提供的指南进行集成和使用。

最后,由于illume可能是一个非标准或较少使用的插件,建议在使用前仔细审查其源代码和文档,以确保其安全性和功能性符合你的需求。

回到顶部