Actionscript 3 闪存AS3保存滑块值
我有一个控制背景音乐音量的滑块 在滑块组件参数值中:我将其设置为5 当我将滑块滑动到2并导航到其他电影剪辑时。然后返回滑块,值为5。如何存储2的值而不是显示5Actionscript 3 闪存AS3保存滑块值,actionscript-3,flash,Actionscript 3,Flash,我有一个控制背景音乐音量的滑块 在滑块组件参数值中:我将其设置为5 当我将滑块滑动到2并导航到其他电影剪辑时。然后返回滑块,值为5。如何存储2的值而不是显示5 import fl.events.SliderEvent; import flash.media.SoundTransform; var myTransform = new SoundTransform(); scMC.addEventListener(SliderEvent.THUMB_DRAG, changeVolume); f
import fl.events.SliderEvent;
import flash.media.SoundTransform;
var myTransform = new SoundTransform();
scMC.addEventListener(SliderEvent.THUMB_DRAG, changeVolume);
function changeVolume(event:SliderEvent):void{
MovieClip(this.root).myChannel.soundTransform = myTransform;
myTransform.volume = scMC.value;
volumeText.text = "Volume is " + scMC.value;
}
您需要将该值存储在全局变量或静态变量中。如果不想进入自定义类文件和静态变量,使用时间线代码可以实现这一点的简单方法如下: 在根时间线代码中:
var sliderVal;
在您的时间线代码中(来自您的问题):
您的问题是没有将视图与模型(数据)分离,因此模型的寿命与视图的寿命相同。要使模型独立于视图而存在,需要使视图仅显示给定的值,并使外部值中的任何更改可供以后使用 比如说:
public class SliderView extends MovieClip {
protected var _slider:Slider;
protected var _sliderValue:Number;
/*Flash will populate this variable for you if you put
a slider on the stage and give it an instance name of "slider."
*/
public function get slider():Slider {
return _slider;
}
public function set slider(value:Slider):void {
if (value != _slider) {
if (_slider) {
_slider.removeEventListener(SliderEvent.CHANGE, onSliderChange);
}
_slider=value;
if (_slider) {
_slider.addEventListener(SliderEvent.CHANGE, onSliderChange);
}
}
}
public function get sliderValue():Number{
return _sliderValue;
}
public function set sliderValue(value:Number):void {
if (value != _sliderValue) {
_sliderValue = value;
if (_slider) {
_slider.value = value;
}
dispatchEvent(new Event('sliderValueChanged'));//anything needing to know about the change is notified immediately
}
}
protected function onSliderChange(e:SliderEvent):void {
sliderValue = Slider(e.target).value;
}
}
请注意,从可维护性的角度来看,此代码比您发布的时间线样式的代码有几个优点
无论是ActionScript2还是ActionScript3FWIW,全局值和静态值都是不好的做法,总是有办法避免它们。静态变量和方法肯定有它们的位置,只有在使用不当时才是不好的做法。持有通用卷值的静态类可以很好地使用静态值。对于运行时可能发生更改的任何内容,使用静态永远都不合适()。它们唯一适合的地方是枚举常量值。
public class SliderView extends MovieClip {
protected var _slider:Slider;
protected var _sliderValue:Number;
/*Flash will populate this variable for you if you put
a slider on the stage and give it an instance name of "slider."
*/
public function get slider():Slider {
return _slider;
}
public function set slider(value:Slider):void {
if (value != _slider) {
if (_slider) {
_slider.removeEventListener(SliderEvent.CHANGE, onSliderChange);
}
_slider=value;
if (_slider) {
_slider.addEventListener(SliderEvent.CHANGE, onSliderChange);
}
}
}
public function get sliderValue():Number{
return _sliderValue;
}
public function set sliderValue(value:Number):void {
if (value != _sliderValue) {
_sliderValue = value;
if (_slider) {
_slider.value = value;
}
dispatchEvent(new Event('sliderValueChanged'));//anything needing to know about the change is notified immediately
}
}
protected function onSliderChange(e:SliderEvent):void {
sliderValue = Slider(e.target).value;
}
}