Flutter游戏行为控制插件flame_steering_behaviors的使用

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

Flutter游戏行为控制插件flame_steering_behaviors的使用

安装 💻

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flame_steering_behaviors: ^版本号

然后运行:

flutter pub get

使用 ✨

该插件是基于 flame_behaviors 构建的,如果你还不熟悉它,建议先阅读 flame_behaviors 的文档。

可控实体 (Steerable)

要将行为控制应用到你的实体上,你需要将 Steerable 混入到你的实体类中:

class MyEntity extends Entity with Steerable {
  /// 提供该实体可以达到的最大速度。
  double get maxVelocity => 100;

  // 其他逻辑
}

Steerable 混入为你的实体提供了 velocity 值,在每个更新周期内都会应用这个速度直到速度变为零。

行为控制 (Steering Behaviors)

每个由本项目定义的算法都可以作为 Behavior 使用,并且可以像其他行为一样添加到 Steerable 实体中:

class MyEntity extends Entity with Steerable {
  MyEntity() : super(
    behaviors: [
      WanderBehavior(
        circleDistance: 200,
        maximumAngle: 45 * degrees2Radians,
        startingAngle: 0,
      )
    ]
  );

  // 其他逻辑
}

某些行为可能需要在实体创建时无法获取的信息。在这种情况下,建议使用实体的 onLoad 方法:

class MyEntity extends Entity with Steerable {
  @override
  Future<void> onLoad() async {
    world.children.register&lt;MyOtherEntity&gt;();
    await add(
      SeparationBehavior(
        world.children.query&lt;MyOtherEntity&gt;(),
        maxDistance: 25,
        maxAcceleration: 1000,
      ),
    );
  }

  // 其他逻辑
}

完整示例

你可以查看完整的示例代码,以更好地理解如何使用 flame_steering_behaviors 插件。

import 'package:example/src/example_game.dart';
import 'package:flame/game.dart';
import 'package:flutter/material.dart';

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

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

1 回复

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


当然,下面是一个关于如何在Flutter游戏中使用flame_steering_behaviors插件来控制游戏对象行为的示例代码。flame_steering_behaviors是Flutter游戏引擎Flame的一个扩展,用于实现复杂的游戏对象导航和移动行为。

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

dependencies:
  flutter:
    sdk: flutter
  flame: ^1.0.0  # 请使用最新版本
  flame_steering_behaviors: ^0.3.0  # 请使用最新版本

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

以下是一个简单的示例,展示如何在Flutter游戏中使用flame_steering_behaviors来控制一个游戏对象的移动行为。

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

class MyGame extends BaseGame with HasTapDetector {
  late SteeringActor player;
  late Vector2 targetPosition;

  @override
  Future<void> onLoad() async {
    // 初始化游戏对象
    player = SteeringActor(
      size: Vector2(50, 50),
      position: Vector2(100, 100),
      sprite: await images.load('player.png'),  // 请确保在assets文件夹中有这张图片
    )
      ..addBehavior(SeekBehavior(target: targetPosition))  // 添加SeekBehavior行为
      ..addBehavior(ArrivalBehavior())  // 当到达目标时停止
      ..addBehavior(WanderBehavior(wanderRadius: 50.0, wanderDistance: 100.0));  // 在等待时徘徊

    add(player);

    // 初始化目标位置
    targetPosition = Vector2(400, 300);
  }

  @override
  void onTapUp(TapUpDetails details) {
    super.onTapUp(details);
    // 更新目标位置为点击位置
    targetPosition = Vector2(details.globalPosition.dx, details.globalPosition.dy);
    // 重新添加SeekBehavior以确保玩家会继续向新目标移动
    player.removeAllBehaviors();
    player.addBehavior(SeekBehavior(target: targetPosition));
    player.addBehavior(ArrivalBehavior());
  }
}

void main() {
  // 确保Flutter引擎初始化完成
  WidgetsFlutterBinding.ensureInitialized();

  // 配置游戏窗口
  GameWidget.configure(
    game: MyGame(),
    width: 800,
    height: 600,
    orientation: Orientation.portrait,
    fullscreen: true,
  );

  // 运行Flutter应用
  runApp(GameWidget());
}

在这个示例中,我们创建了一个简单的Flutter游戏,其中包含一个名为player的游戏对象。player对象使用了SteeringActor类,并添加了三种行为:

  1. SeekBehavior:使玩家向目标位置移动。
  2. ArrivalBehavior:当玩家到达目标位置时停止移动。
  3. WanderBehavior:在玩家等待新目标时,使其在一定范围内徘徊。

我们通过点击屏幕来更新目标位置,并重新为玩家添加SeekBehavior,以确保玩家会继续向新的目标位置移动。

请注意,你需要将一张名为player.png的图片放在assets文件夹中,并在pubspec.yaml中声明这个资源:

flutter:
  assets:
    - assets/player.png

这个示例展示了flame_steering_behaviors插件的基本用法,你可以根据需要进一步扩展和修改这个示例以适应你的游戏逻辑。

回到顶部