AS3多场景不同帧率设置:如何修正代码并获取示例?
不同场景设置不同帧率的修正方案与示例
原代码问题分析
你的代码存在两个核心错误:
- 赋值类型错误:
stage.frameRate需要接收数值类型的帧率,但你错误地将场景名字符串(如'Game')赋值给它,这会导致帧率设置失效。 - 逻辑覆盖问题:三次重复赋值
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
相关产品推荐
相关产品推荐

