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

AS3多场景不同帧率设置:如何修正代码并获取示例?

不同场景设置不同帧率的修正方案与示例

原代码问题分析

你的代码存在两个核心错误:

  1. 赋值类型错误:stage.frameRate需要接收数值类型的帧率,但你错误地将场景名字符串(如'Game')赋值给它,这会导致帧率设置失效。
  2. 逻辑覆盖问题:三次重复赋值stage.frameRate,最后一行的判断会覆盖前两行的结果,无法实现多场景分别设置的需求。

修正后的代码示例

方案1:使用switch-case(可读性更高)

function modifyFrameRate():void {
    // 根据当前场景名称匹配对应帧率
    switch(this.currentScene.name) {
        case 'Title':
        case 'Intro Scene':
            stage.frameRate = 60; // Title和Intro Scene场景设为60帧
            break;
        case 'Game':
            stage.frameRate = 24; // Game场景设为24帧
            break;
        default:
            stage.frameRate = 30; // 未匹配到场景时的默认帧率
            break;
    }
}
modifyFrameRate();

方案2:使用链式三元运算符(代码更紧凑)

function modifyFrameRate():void {
    stage.frameRate = 
        this.currentScene.name == 'Title' || this.currentScene.name == 'Intro Scene' ? 60 :
        this.currentScene.name == 'Game' ? 24 :
        30; // 默认帧率
}
modifyFrameRate();

完整场景切换监听方案

仅初始化时调用modifyFrameRate()只能设置当前场景的帧率,场景切换后需要自动更新,因此需要监听场景切换事件:

// 监听场景切换事件
this.addEventListener(SceneEvent.SCENE_CHANGE, onSceneSwitched);

function onSceneSwitched(e:SceneEvent):void {
    modifyFrameRate();
}

function modifyFrameRate():void {
    switch(this.currentScene.name) {
        case 'Title':
        case 'Intro Scene':
            stage.frameRate = 60;
            break;
        case 'Game':
            stage.frameRate = 24;
            break;
        default:
            stage.frameRate = 30;
            break;
    }
}

// 初始化时设置一次帧率
modifyFrameRate();

内容的提问来源于stack exchange,提问作者Isaac Yeap Jie Ling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:23:22