それはすべてのものを投稿するあまりにも多くのコードだから、私は舞台を設定してみましょう:別のクラスにブール変数をチェック
私はMain.asを持っている私は、他からの音をトリガーすることができますので、私のSoundController.asを設定しています(SoundController.asには、必要に応じてすべてのサウンドを呼び出すために必要なすべての関数があります)
私は、これらのサウンドにアクセスできるControlPanel.asをdocRef.soundControl.laserFireなどで使用しています。この場合、レーザーファイア音が一度トリガーされます。
ここに私の質問があります。私はあなたが別のレーザーを発射する前に、このレーザーサウンドエフェクトの演奏が終了するようにしたい。私はその旨を
if (docRef.soundControl.laserPlaying()==false)
または何かをしたいenterFrameHandler機能の私のControlPanelクラスで今すぐ
private var _laserPlaying:Boolean = false;
internal function laserFire():void {
_sfxChannel = _laser.play(25);
_laserPlaying=true;
_sfxChannel.addEventListener(Event.SOUND_COMPLETE, laserFinished);
}
internal function laserFinished(event:Event):void {
_sfxChannel.removeEventListener(Event.SOUND_COMPLETE, laserFinished);
_laserPlaying=false;
}
public function get laserPlaying():Boolean {
return _laserPlaying;
}
public function set laserPlaying(value:Boolean):void {
_laserPlaying = value;
}
:だからSoundController.asに、私は次のコードの断片を設定しました私は、サウンドが完了したことを確認して、プレイヤーが再びトリガーを押してレーザーを発射できるようにすることができます。これまで私が試した変種は、私にはエラー(この場合は1195;静的な型のSoundControllerを持つリファレンスを使ってアクセスできないメソッドのlaserPlayingを試みた)または実際にはコンパイルされますが、最初のレーザーショットを発射した後、トリガをもう一度押す。だから私は明らかに間違ったことをしており、誰かが助けることを望んでいる。
レーザー音が最初にうまくいきますので、コードのすべての部分について心配する必要はありません。しかし、私が何かを作っていることを理解するためにもっと多くの情報が必要な場合は、私に知らせてください。そして事前に感謝!あなたのsoundControllerとのControlPanelは主にインスタンス化されている場合は
あなたのコードに飛び込むことなく、ただの思考、:あなたのSoundChannelは読み取り専用の「位置」プロパティを持っています。あなたがレーザーを発射しようとするときには、ちょうどチャネルの位置を確認してください。 0より大きい場合(途中で停止していない限り、再生中であることを意味します)、あなたの機能を発動させないでください。静的クラス部材を介して – Craig
使用「グローバル」変数私はここで示唆したように:私は誤解だ場合を除きhttp://stackoverflow.com/a/41651064/4687633 – Organis
@Craig、それは私がしようとしているものを行うために、別の方法のように聞こえますただし、SoundControllerクラスでのみ動作します。私はまだその情報をControlPanelクラスに渡す方法が必要です。このクラスは私が "if"チェックをしようとしているところです。 – FlashNoob468