动作脚本3 - 声音仅在物体触摸时播放一次

时间:2011-02-25 18:26:55

标签: flash actionscript-3 wav playback

我有一个griddle_mc,bacon_mc和BaconCooking.wav。当培根移到平底锅上时,我想播放wav。如果我移动培根直到它只是接触烤盘,wav就可以正常播放,但是如果我继续将bacon_mc拖过烤盘,那么wav会变得响亮而扭曲,就像它同时播放多个wav一样。

private function __handleSliceDown($evt:MouseEvent):void {
    slice1_mc.startDrag(true);
}

private function __handleSliceUp($evt:MouseEvent):void {
    slice1_mc.stopDrag();
    addEventListener(Event.ENTER_FRAME, __checkHit);     
}

private function __checkHit($evt:Event):void {
    if (this.slice1_mc.hitTestObject(griddle_mc)) {
        if (!hitting) {
            sc = BaconCooking.play();    
        }
    }
}

如何让wav正常播放?

修改

 private function __checkHit($evt:Event):void {
             if (this.slice1_mc.hitTestObject(griddle_mc)) {    
                if(isPlaying){
                    sc = BaconCooking.play(); 
                    isPlaying = true;
                }
             }else{
                 isPlaying = false;
                 sc.stop();
                    }
             }
  • isPlaying是默认设置为false的布尔值。

2 个答案:

答案 0 :(得分:1)

现在你有if(isPlaying){,但不应该是if(!isPlaying){

我会这样做的方式:当两个对象命中时,如果isPlaying boolean为false并且播放声音,则将其设置为true。如果对象不再碰撞,isPlaying布尔值只能再次变为假。

答案 1 :(得分:0)

编辑:因为默认情况下isPlaying为false,所以它永远不会播放声音。你的if语句应该是:

 if(!isPlaying){
 <code to play sound
 }

此外,我之前提到了这一点,但我会扩展:你需要一个额外的事件监听器来检测对象何时触摸,当调用它时你将isPlaying设置为false。我已经在Actionscript中编程了一段时间,但这是你需要做的一般想法。

使用变量和条件语句。每次对象发生碰撞时,都会检查此变量是否为真。如果是,它将播放声音并将变量设置为true,否则,它将无效。当对象不再触摸时,变量将被设置为false。