图层
图层是一项有用的功能,可让您按上下文分组渲染,并允许您进行预渲染。 举例来说,这可以实现对内存中那些变化不大的部分的渲染(例如背景),例如通过后台渲染,从而为需要在每个循环周期渲染的更多动态内容释放资源。
Flame中有两种类型的图层: DynamicLayer
(用于移动或更改的事物)和 PreRenderedLayer
(用于静态的事物)。
DynamicLayer
动态图层是每次在画布上绘制时都会渲染的图层。 顾名思义,它用于动态内容,对具有相同上下文的渲染非常有用。
Usage example:
class GameLayer extends DynamicLayer {
final MyGame game;
GameLayer(this.game);
void drawLayer() {
game.playerSprite.renderRect(
canvas,
game.playerRect,
);
game.enemySprite.renderRect(
canvas,
game.enemyRect,
);
}
}
class MyGame extends Game {
// 省略其他方法...
void render(Canvas canvas) {
gameLayer.render(canvas); // x和y可以作为可选的参数
}
}
PreRenderedLayer
预渲染的图层是仅渲染一次,缓存在内存中,然后再复制到游戏画布上的图层。 它们对于缓存游戏中不变的内容(例如背景)很有用。
用法示例:
class BackgroundLayer extends PreRenderedLayer {
final Sprite sprite;
BackgroundLayer(this.sprite);
void drawLayer() {
sprite.renderRect(
canvas,
const Rect.fromLTWH(50, 200, 300, 150),
);
}
}
class MyGame extends Game {
// 省略其他方法...
void render(Canvas canvas) {
backgroundLayer.render(canvas); // x和y可以作为可选的参数
}
}
图层处理器
Flame还提供了一种在图层上添加处理器的方法,这是一种在整个图层上添加效果的方法。 开箱即用,目前只有 ShadowProcessor
可用,此处理器可在您的图层上渲染很酷的阴影。
要将处理器添加到您的层,只需将它们添加到 preProcessors
或 postProcessors
图层列表中即可。 例如:
// DynamicLayer 和 PreRenderedLayer 的工作原理相同
class BackgroundLayer extends PreRenderedLayer {
final Sprite sprite;
BackgroundLayer(this.sprite) {
preProcessors.add(ShadowProcessor());
}
void drawLayer() { /* 省略 */ }
可以通过扩展 LayerProcessor
类来创建自定义处理器。
您可以查看图层的示例 here 。