我遇到了变量范围问题。我知道这必须是一个简单的解决办法,但我找不到它。
我需要通过功能中的声道播放声音。然后我需要另一个功能来读取声道位置。但它没有看到它,因为播放它的函数中的新变量。如果我在函数外面播放它,我可以从另一个函数获取位置,但如果我在函数中发出声音,则另一个函数无法读取通道位置。我该如何解决这个问题。
守则
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
var lastPosition:Number = 0; var CrossAudio = new Sound();
CrossAudio.load(new URLRequest("Cross.mp3"));
function playCross() {
PapaAudioChannel = CrossAudio.play();
}
bt_play.addEventListener(MouseEvent.CLICK, playA);
function playA(event:MouseEvent):void {
trace(PapaAudioChannel.position); // Does not work
/// It can't doesn't recognize the PapaAudioChannel because
/// it began playing in another function.
}
如何获取第二个功能以查看音频的位置。我需要通过播放和暂停按钮启动音频,以便播放必须从函数开始。
由于
答案 0 :(得分:0)
AFAIK声音可以稍微延迟开始,因此在播放()声明后跟踪声音位置不是一个好主意。
修改强>
顺便说一句,PapaAudioChannel
定义在哪里,如果是的话? (因为这是AS3)
如果你在一个函数中定义了一个var,那么它会在函数的末尾与该函数一起消失!
因此,您可能希望在全局范围内定义PapaAudioChannel
:
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
var PapaAudioChannel:SoundChannel; // defines variable
var lastPosition:Number = 0; var CrossAudio = new Sound();
CrossAudio.load(new URLRequest("Cross.mp3"));
function playCross() {
PapaAudioChannel = CrossAudio.play();
}
bt_play.addEventListener(MouseEvent.CLICK, playA);
function playA(event:MouseEvent):void {
trace(PapaAudioChannel.position);
}