0

我遇到了变量范围的问题。我知道这一定很容易解决,但我找不到。

我需要通过函数中的声道播放声音。然后我需要另一个函数来读取声道位置。但它没有看到它,因为播放它的函数中有新的 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. 

}

如何获得第二个功能来查看音频的位置。我需要使用播放和暂停按钮开始播放音频,因此播放必须在函数中开始。

谢谢

4

1 回答 1

0

AFAIK 声音可能会稍有延迟,因此在 play() 语句之后跟踪声音位置并不是一个好主意。

编辑

顺便说一句,如果是,在哪里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);

}
于 2013-02-13T13:30:20.403 回答