我有一个带有场景选择菜单的动画集合。我把一个工作正常的音乐按钮组合在了一起。我使用布尔值来确定每个场景上的音乐是打开还是关闭。 问题是布尔值的声明是在菜单场景的第一帧上,每次动画结束时,它都会返回菜单场景的第一帧,声明会覆盖布尔值的状态。因此,如果稍后在菜单中或在其中一个动画中更改布尔值,则每次菜单重放时,布尔值都将恢复为其声明的值。
是否有一种方法可以防止重复帧中的变量重新声明,或者一个命令来计算帧的播放次数,我可以用来跳过变量声明吗?
使用的代码:
//Stop other scene sounds
SoundMixer.stopAll();
//music variables
var mutemusic_bln:Boolean = new Boolean();
var menubackgroundmusic:Sound = new menu_mp3();
var music_cnl:SoundChannel = new SoundChannel();
var music_trn:SoundTransform = new SoundTransform();
//starting music
if (mutemusic_bln){
music_cnl= menubackgroundmusic.play();
music_trn.volume = 1;
music_cnl.soundTransform = music_trn
}else{
music_cnl= menubackgroundmusic.play();
music_trn.volume = 0;
music_cnl.soundTransform = music_trn
}
我设法通过在菜单场景之前创建一个空白场景来使其正常工作,只有一个空白脚本框架。我在那里替换了布尔声明,因为动画返回到菜单而不是菜单之前的场景,所以它不会覆盖该值。虽然我仍然会欣赏更体面或更专业的解决方案。
答案 0 :(得分:0)
无法阻止变量被更改。这就是为什么它的变量:)另一方面的常量只是初始化一次,以后不能改变。
逻辑中唯一的问题是使用时间轴并且每次都执行相同的代码。你的解决方案没问题。有时人们只添加一个空白的关键帧,而不是整个场景,并在时间轴的末尾添加gotoAndPlay(2);
。但这个想法与你的想法完全一样 - 为此欢呼! :)
另一个解决方案是写一些类似的东西:
if (!this.initialized) {
// declare everything here, it will be executed only once
this.initialized = true;
}
这样做会将根变量(initialized
)设置为true,并且只执行一次块。该变量稍后不会被更改,因为该帧中没有可再次更改它的代码,与重置它的代码不同。
无论哪种方式,逻辑都和问题一样 - 如果你使用类,这几乎不会发生!
希望有所帮助!