2017-01-22 4 views
0

それはすべてのものを投稿するあまりにも多くのコードだから、私は舞台を設定してみましょう:別のクラスにブール変数をチェック

私は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は主にインスタンス化されている場合は

+0

あなたのコードに飛び込むことなく、ただの思考、:あなたのSoundChannelは読み取り専用の「位置」プロパティを持っています。あなたがレーザーを発射しようとするときには、ちょうどチャネルの位置を確認してください。 0より大きい場合(途中で停止していない限り、再生中であることを意味します)、あなたの機能を発動させないでください。静的クラス部材を介して – Craig

+0

使用「グローバル」変数私はここで示唆したように:私は誤解だ場合を除きhttp://stackoverflow.com/a/41651064/4687633 – Organis

+0

@Craig、それは私がしようとしているものを行うために、別の方法のように聞こえますただし、SoundControllerクラスでのみ動作します。私はまだその情報をControlPanelクラスに渡す方法が必要です。このクラスは私が "if"チェックをしようとしているところです。 – FlashNoob468

答えて

0

はこのように、ControlPanelの中​​で、発火イベントを処理:もちろん

if(MovieClip(parent).soundController.soundChannel.position==0) 
{ 
    MovieClip(parent).soundController.laserfire(); 
}else{do nothing;} 

が適切なインスタンス名を使用します。

これが機能しない場合は、コードを少し分かりやすくする必要があります。

0

大変申し訳ございません。私はこの仕事をするために何をする必要があるのか​​分かりませんでした。これはおそらく他の人にはあまり役に立たないでしょう。なぜなら、私のセットアップはおそらく私のレイアウトに独特であり、他の誰かが試みるものではないが、私がとにかくやったことです。私ControlPanel.asで

は、私は、次のコードを追加:

private var _soundController:SoundController; 

とし、その後、私はControlPanelをステージに追加すると、それが発生すると、私は解雇を待っ機能を持っている:

_soundController = new SoundController(docRef); 

if(!_soundController.laserPlaying) { do stuff; } 

それは今を参照してください。私は単純に呼び出すことができたそれらを追加することによって、今

msは、laserPlayingがfalseであるのを待ってから、意図したとおりに動く。

+0

本当に誰にも使われないのであれば、本当にあなたの質問を削除することに間違いはありません。私はインターネットである殺人犯に追加したくないので、これを数回しました。 –

関連する問題