无需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
相关产品推荐
相关产品推荐

