いくつかのシーンでインスタンスとして繰り返し挿入されるボタン シンボルがあります。このボタンはシーン間をリンクし、基本的に同じ機能を実行します。
eventListener MouseEvent.CLICK をシンボル自体に追加して、各シーンの各インスタンスのリスナーを書き直す必要がないようにする方法はありますか?
いくつかのシーンでインスタンスとして繰り返し挿入されるボタン シンボルがあります。このボタンはシーン間をリンクし、基本的に同じ機能を実行します。
eventListener MouseEvent.CLICK をシンボル自体に追加して、各シーンの各インスタンスのリスナーを書き直す必要がないようにする方法はありますか?
クラス、つまり「LinkingButton」を作成します。このクラス内に、必要な処理を実行するクリックハンドラーを作成します。
次に、クラスをライブラリ内のシンボルに「リンク」する必要があります。
正しく行われた場合は、シンボルをステージにドラッグするだけで、すぐに機能するはずです。または、コードを使用したい場合は、それも簡単です。
var myButton:LinkingButton = new LinkingButton();
addChild(myButton);
シンボル (つまり ) でマウス イベントを受け取ることも、Class
そこからイベントを送出することもできません。だからそれは問題外です。
新しいスプライト シンボルを作成し、その中にカスタム ボタンを配置し、そのスプライト内のフレーム スクリプトにリスナーを追加することもできますが、これは非常に面倒です。
これを行う最もクリーンな方法は、Event.ADDED のリスナーをステージに追加することです。これはDisplayObject
、表示リストの任意の場所に の新しいインスタンスが追加されるたびにキャッチされます。また、ハンドラー関数を作成して、スペシャルの各インスタンスに適切なリスナーを追加します。ボタン:
function onInstanceAdded( event:Event ) : void {
if( event.target ) is MySpecialButton
event.target.addEventListener( MouseEvent.CLICK, onSpecialButtonClick );
}
function onSpecialButtonClick( event:MouseEvent ) : void {
doMagicStuffHere();
}
stage.addEventListener( Event.ADDED, onInstanceAdded );