You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需Camera,如何获取Flutter Flame游戏的屏幕尺寸?

无需World/Camera获取屏幕尺寸适配Flame游戏的方案

你可以通过以下两种原生Flutter或Flame自带的方法获取屏幕尺寸,完全不需要依赖World或Camera组件:

方法一:利用Flutter的WidgetsBinding获取初始屏幕尺寸

Flame基于Flutter构建,因此可以直接通过WidgetsBinding获取系统窗口的物理尺寸,再转换为逻辑像素尺寸:

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

class YourGame extends FlameGame {
  late Size screenSize;

  @override
  void onLoad() async {
    super.onLoad();
    final window = WidgetsBinding.instance.window;
    // 转换为逻辑像素(适配不同设备的像素密度)
    screenSize = Size(
      window.physicalSize.width / window.devicePixelRatio,
      window.physicalSize.height / window.devicePixelRatio,
    );
    // 这里基于screenSize编写你的适配逻辑
  }
}

方法二:重写Flame的onGameResize监听尺寸变化

Flame的FlameGame类自带onGameResize回调,当游戏窗口尺寸变化(比如屏幕旋转、切换设备)时会自动触发,直接拿到当前的逻辑像素尺寸:

import 'package:flame/game.dart';
import 'package:flutter/widgets.dart';

class YourGame extends FlameGame {
  late Size currentScreenSize;

  @override
  void onGameResize(Size size) {
    super.onGameResize(size);
    currentScreenSize = size;
    // 每次尺寸变化时更新适配逻辑
    updateGameAdaptation();
  }

  void updateGameAdaptation() {
    // 示例:按屏幕比例调整游戏元素大小
    // player.size = Vector2(currentScreenSize.width * 0.1, currentScreenSize.height * 0.15);
  }
}

这两种方法都完全独立于World和Camera组件,前者适合初始化时获取固定尺寸,后者适合动态监听尺寸变化,覆盖大部分适配场景。

内容的提问来源于stack exchange,提问作者pknjigvfvl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:57:29