我遇到了变量作用域的问题。我知道这一定很容易解决,但是我找不到。
我需要在函数中通过声道播放声音。然后我需要另一个函数来读取声道位置。但它看不到它,因为播放它的函数中有新的var。如果我在函数外部播放它,我可以从另一个函数获得位置,但如果我在函数中请求声音,则另一个函数无法读取通道位置。我该怎么解决这个问题。
《守则》
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.
}如何使用第二个函数来查看音频的位置。我需要用播放和暂停按钮启动音频,所以播放必须在一个函数中开始。
谢谢
发布于 2013-02-13 21:30:20
AFAIK声音可能会有一点延迟,所以在play()语句之后跟踪声音位置不是一个好主意。
编辑
顺便问一下,PapaAudioChannel是在哪里定义的?(应该是,因为这是AS3)
如果你在一个函数中定义了一个变量,它就会随着这个函数一起死掉,在函数的末尾!
因此,您可能希望在全局范围内定义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);
}https://stackoverflow.com/questions/14852237
复制相似问题