我很難調試我的音頻滑塊。我很確定我的問題在於我的方法之一changeVolumeRedFireball
只是以非常快的速度不斷重複。我在遊戲中每隔一段時間就會聽到一聲毛骨悚然的聲音,所以它似乎是相互關聯的。我在方法內部追蹤「輸出」,並很快發現它以高速重複。Actionscript 3.0方法不斷重複,不知道爲什麼
問題是,我無法弄清楚這是從哪裏來的!另一個說明。這隻會開始重複,一旦我按住我的滑塊,因此激活changeVolumeRedFireball
from dragSliderRedFireball
我確實有其他類引用此類中的方法的其他方法。但他們只能訪問playSoundRedFireball
和stopSoundRedFireball
,所以我不明白爲什麼會有任何影響。此外,該類在遊戲啓動時由我的文檔類實例化。如果有要求,我想我會在文檔類中輸入相關的代碼,但我不認爲它會影響這個問題。
package {
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundTransform;
import flash.geom.Rectangle;
public class VolumeRedFireball extends Sprite {
public var redFireballSnd:Sound = new Sound();
public var redFireballChannel:SoundChannel = new SoundChannel();
//URLRequest=new URLRequest("solitude.wav");
//Make sure you pass URLRequest an audio file on your computer.
public var reqRedFireball:EnemyAppearSound = new EnemyAppearSound();
public var boundaryRedFireball:Rectangle;
public var spriteRedFireball:Sprite;
public var sliderRedFireball:Sprite;
public var xPosRedFireball:Number;
public var yPosRedFireball:Number;
public static var volRedFireball:Number = 1;
public function VolumeRedFireball() {
this.addEventListener(Event.ADDED_TO_STAGE, onStageRedFireball,false,0,true);
volRedFireball=1;
redFireballChannel.soundTransform=new SoundTransform(volRedFireball)
}
public function onStageRedFireball(e:Event):void
{
//We remove it immediately so that it doesn't get called multiple times
//As the instance is added to the display list tree
this.removeEventListener(Event.ADDED_TO_STAGE, onStageRedFireball);
xPosRedFireball = 320;
yPosRedFireball = 170;
initRedFireball();
}
public function initRedFireball():void {
spriteRedFireball = new Sprite();
redFireballChannel.stop();
spriteRedFireball.graphics.beginFill(0x999999);
spriteRedFireball.graphics.drawRect(xPosRedFireball,yPosRedFireball,100,5);
spriteRedFireball.graphics.endFill();
addChild(spriteRedFireball);
spriteRedFireball.x-=spriteRedFireball.width/2;
sliderRedFireball = new Sprite();
sliderRedFireball.graphics.beginFill(0xFF0000);
sliderRedFireball.graphics.drawCircle(xPosRedFireball+50,yPosRedFireball, 15);
sliderRedFireball.graphics.endFill();
addChild(sliderRedFireball);
sliderRedFireball.addEventListener(MouseEvent.MOUSE_DOWN, dragsliderRedFireball);
stage.addEventListener(MouseEvent.MOUSE_UP, stopsliderRedFireball);
boundaryRedFireball=new Rectangle(-100,0,100,0);
}
public function dragsliderRedFireball(event:MouseEvent):void {
sliderRedFireball.startDrag(false,boundaryRedFireball);
sliderRedFireball.removeEventListener(MouseEvent.CLICK, dragsliderRedFireball);
sliderRedFireball.addEventListener(Event.ENTER_FRAME, changeVolumeRedFireball);
}
public function stopsliderRedFireball(event:MouseEvent):void {
sliderRedFireball.stopDrag();
sliderRedFireball.removeEventListener(MouseEvent.MOUSE_UP, stopsliderRedFireball);
}
public function changeVolumeRedFireball(event:Event):void {
volRedFireball=1+Math.round(sliderRedFireball.x)/100;
redFireballChannel.soundTransform=new SoundTransform(volRedFireball);
trace("output");
}
public function playSoundRedFireball():void
{
redFireballChannel = reqRedFireball.play();
}
public function stopSoundRedFireball():void
{
redFireballChannel.stop();
}
}
}
sliderRedFireball.addEventListener(Event.ENTER_FRAME,changeVolumeRedFireball); <==dernièreligne de dragsliderRedFireball。 laméthodechangeVolumeRedFireball estappelléeàchaque frame(soit plusieurs dizaines de fois par seconde)。 – Aralicia
讓我們看看谷歌翻譯是否幫助我在這裏.... – spaderdabomb
好吧,所以加入changeVolumeRedFireball ---> sliderRedFireball.removeEventListener(Event.ENTER_FRAME,changeVolumeRedFireball)應該修復它嗎? – spaderdabomb