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

如何在运行时修改FlxG宽高?resizeGame函数无效

解决HaxeFlixel运行时修改游戏分辨率(FlxG宽高)的问题

经验证的有效解决方案

要在运行时修改HaxeFlixel的游戏逻辑分辨率(即FlxG.width和FlxG.height),不能仅依赖resizeGame函数,需要手动覆盖核心变量并同步更新相关组件,步骤如下:

  1. 直接修改FlxG的核心尺寸变量
    同时更新FlxG.width/FlxG.height和FlxG.gameWidth/FlxG.gameHeight,这两组变量分别对应渲染尺寸和逻辑尺寸:

    var targetWidth = 1280;
    var targetHeight = 720;
    
    FlxG.width = targetWidth;
    FlxG.height = targetHeight;
    FlxG.gameWidth = targetWidth;
    FlxG.gameHeight = targetHeight;
    
  2. 强制更新缩放模式的尺寸配置
    BaseScaleMode的onMeasure方法会默认使用FlxGame初始化时的initialWidth/initialHeight重置尺寸,因此需要手动更新其gameSize并触发重新计算:

    if (FlxG.scaleMode != null) {
        FlxG.scaleMode.gameSize = new FlxPoint(targetWidth, targetHeight);
        FlxG.scaleMode.onMeasure(); // 触发缩放逻辑重新计算
    }
    
  3. 同步调整游戏窗口尺寸(C++目标)
    针对Windows C++编译目标,通过OpenFL的Stage对象修改实际窗口大小:

    Lib.current.stage.stageWidth = targetWidth;
    Lib.current.stage.stageHeight = targetHeight;
    
  4. 重置相机与输入检测
    重新调整相机尺寸并重置鼠标输入,避免偏移和检测异常:

    FlxG.camera.resize(targetWidth, targetHeight);
    FlxG.camera.update();
    FlxG.mouse.reset();
    

问题根源说明

  • resizeGame函数的设计初衷是适配现有窗口尺寸,而非修改游戏的逻辑分辨率,因此调用后只会调整内容缩放比例,不会改变FlxG的宽高值。
  • BaseScaleMode.onMeasure方法会在窗口尺寸变化时自动触发,且默认使用FlxGame初始化时的initialWidth/initialHeight重置尺寸,导致手动修改的FlxG宽高被覆盖。
  • BaseScaleMode中的gameSize变量未被正确关联到FlxG的尺寸更新逻辑,需要手动赋值才能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:35:22