图层

图层是一项有用的功能,可让您按上下文分组渲染,并允许您进行预渲染。 举例来说,这可以实现对内存中那些变化不大的部分的渲染(例如背景),例如通过后台渲染,从而为需要在每个循环周期渲染的更多动态内容释放资源。

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 可用,此处理器可在您的图层上渲染很酷的阴影。

要将处理器添加到您的层,只需将它们添加到 preProcessorspostProcessors 图层列表中即可。 例如:

// DynamicLayer 和 PreRenderedLayer 的工作原理相同
class BackgroundLayer extends PreRenderedLayer {
  final Sprite sprite;

  BackgroundLayer(this.sprite) {
    preProcessors.add(ShadowProcessor());
  }

  
  void drawLayer() { /* 省略 */ }

可以通过扩展 LayerProcessor 类来创建自定义处理器。

您可以查看图层的示例 here

Flame中文站 all right reserved,powered by Gitbook最后修改: 2020-08-23 20:27:25

results matching ""

    No results matching ""