如何使用带有flutter的火焰游戏引擎渲染视差图像



我对火焰游戏引擎很陌生,但我想为我的背景渲染一个视差图像,但当我试图在我的主要游戏类中渲染它时,它不会出现?

class BackGround extends AnimationComponent {
Rect backgroundRect;
ParallaxComponent _parallaxComponent;
BackGround() : super.empty() {
backgroundRect = Rect.fromLTWH(
100,
100,
100,
100,
);
}
void render(Canvas c) {
_parallaxComponent = ParallaxComponent([
ParallaxImage('Layer_0010_1.png'),
ParallaxImage('Layer_0009_2.png'),
ParallaxImage('Layer_0008_3.png'),
ParallaxImage('Layer_0006_4.png'),
ParallaxImage('Layer_0005_5.png'),
ParallaxImage('Layer_0003_6.png'),
ParallaxImage('Layer_0002_7.png'),
ParallaxImage('Layer_0001_8.png'),
ParallaxImage('Layer_0000_9.png'),
], baseSpeed: Offset(100, 0), layerDelta: Offset(20, 0));
_parallaxComponent.render(c);
}
}

这是我的主要游戏类。

class MainGame extends BaseGame with TapDetector, HasWidgetsOverlay {
BackGround backback;
Size screenSize;

MainGame(this.storage) {
initialize();
}
void initialize() async {
// resize(await Flame.util.initialDimensions());
backback = BackGround();
}
void render(Canvas c) {
backback.render(c);
}
}

你不需要自己调用渲染方法,当Component被添加到游戏中时,它就为你完成了。就像在ParallaxComponent的例子中,你将游戏的组件add像这样:

import 'package:flame/components.dart';
import 'package:flame/game.dart';
import 'package:flame/parallax.dart';
class MyParallaxComponent extends ParallaxComponent<ComponentParallaxGame> {
@override
Future<void> onLoad() async {
parallax = await gameRef.loadParallax(
[
ParallaxImageData('parallax/bg.png'),
ParallaxImageData('parallax/mountain-far.png'),
ParallaxImageData('parallax/mountains.png'),
ParallaxImageData('parallax/trees.png'),
ParallaxImageData('parallax/foreground-trees.png'),
],
baseVelocity: Vector2(20, 0),
velocityMultiplierDelta: Vector2(1.8, 1.0),
);
}
}
class ComponentParallaxGame extends BaseGame {
@override
Future<void> onLoad() async {
add(MyParallaxComponent());
}
}

另外两个需要注意的重要事情是组件应该在onLoad中初始化,而不是在构造函数中初始化,并且您已经在Game类上有了size,因此您不必像在示例中那样创建自己的screenSize变量。sizeVector2类型的,就像Flame中大多数这样的变量一样,宽度可以用size.x访问,高度可以用size.y访问。

看起来你也可能使用Flame0.26.4,我建议你使用1.0.0-releasecandidate.13代替,因为它更成熟,它是正在积极开发的代码库(不要害怕releasecandidate标签,我们将很快发布1.0.0)。