render method

void render(
  1. Canvas canvas
)

绘制界面

Implementation

void render(Canvas canvas) {
  canvas.save();

  /// 需要移动的位置
  double moveX = 0;
  double moveY = 0;

  /// 跟随摄像机的精灵
  if (camera.sprite != null) {
    if (camera.limit != null) {
      /// 限制边界
      moveX = camera.rect.width / 2 - camera.sprite!.position.x;
      moveY = camera.rect.height / 2 - camera.sprite!.position.y;

      if (camera.sprite!.position.x <= camera.rect.width / 2) {
        moveX = 0;
      }
      if (camera.sprite!.position.y <= camera.rect.height / 2) {
        moveY = 0;
      }
      if (camera.sprite!.position.x >= camera.limit!.dx - camera.rect.width / 2) {
        moveX = camera.rect.width - camera.limit!.dx;
      }
      if (camera.sprite!.position.y >= camera.limit!.dy - camera.rect.height / 2) {
        moveY = camera.rect.height - camera.limit!.dy;
      }
    } else {
      moveX = camera.rect.width / 2 - camera.sprite!.position.x;
      moveY = camera.rect.height / 2 - camera.sprite!.position.y;
    }
    canvas.translate(moveX, moveY);
  }

  children.forEach((sprite) {
    if (sprite.visible) {
      if (!sprite.fixed) {
        sprite.render(canvas);
      }
    }
  });

  /// 固定到屏幕位置的精灵
  if (camera.sprite != null) {
    canvas.translate(-moveX, -moveY);
  }
  children.forEach((sprite) {
    if (sprite.visible) {
      if (sprite.fixed) {
        sprite.render(canvas);
      }
    }
  });

  canvas.restore();
}