2011-02-25 68 views
1

我有一个griddle_mc,bacon_mc和BaconCooking.wav。当培根被移到烤盘上时,我想播放wav。如果我移动培根直到它接触到烤盘时,wav播放正常,但是如果我继续拖动bacon_mc越过烤盘,则wav会变得响亮并失真,就像它同时播放多个wav实例一样。Actionscript 3-使声音只在对象触及时播放一次

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默认情况下。

回答

0

编辑:既然IsPlaying模块默认为false,比它永远不会打开始与声音。你的if语句应该是:

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

而且,我摸在此之前,但我将扩大:你需要一个额外的事件监听器检测当对象是-not-感人,当那个叫您将设置打算假。我已经用ActionScript编写了一段时间,但这是你需要做的一般想法。

使用变量和条件语句。每次对象碰撞时,它都会检查这个变量是否为真。如果是这样,比起播放声音并将变量设置为true,否则它什么也不做。当对象不再接触时,变量将被设置为false。

+0

我做了一些编辑,但他们是不正确的,因为现在声音根本不会播放。 – RapsFan1981 2011-02-25 19:05:01

+0

谢谢了:) – RapsFan1981 2011-02-26 01:09:21

1

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

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