オブジェクト間でデータを渡す一般的な方法の1つは、カスタムイベントを送出することです。これには、クラス間の依存関係を減らすという利点があります。たとえば、構造に「Drinks」クラスを追加したいとしましょう。すべてのクラスが相互に接続されている場合は、アプリケーションを更新するのが難しいかもしれません。一方、イベントでは、新しいCustomEventを作成するか、現在のイベントに飲み物のプロパティを追加するかのどちらかを決めることができます。
実際には、イベントを送受信するイベントディスパッチャが必要です。次に、関連オブジェクトに通知します。
は、各パッケージを取るとの.as拡張子(例:Main.as)とそれをクラスの名前を与え、自分のファイルに保存:
はここで広範な例です。すべてのファイルは同じフォルダに置く必要があります。 Main.asがあなたのエントリーポイントになります。もしあなたがFlash CSを使用しているなら、これはあなたのDocument Classです。
AS3に関するいくつかのチュートリアルをチェックしてみてください。これは、頭痛の負荷を軽減し、基本的な問題を解決しようとして時間を節約するために私がしばしば与えるアドバイスです。 Colin MookのLost Actionscript Weekend Videoチュートリアルを試してみましょう。たとえば、Adobe TVで見つけることができます。
package
{
import flash.display.Sprite;
import flash.events.EventDispatcher;
public class Main extends Sprite
{
private var dispatcher:EventDispatcher;
private var salads:Categories;
private var menu:MenuItems;
public function Main()
{
dispatcher = new EventDispatcher();
menu = new MenuItems(dispatcher);
salads = new Categories(dispatcher);
}
}
}
******
package
{
import flash.events.Event;
public class MenuEvent extends Event
{
//Your Custom Event
public static const CATEGORY:String = "Category";
//Here I type the data property as an Object, but it could also
//be a String , depending on the type of info you need to pass
public var data:Object;
public function MenuEvent(type:String , data:Object):void
{
super (type);
this.data = data;
}
override public function clone():MenuEvent
{
return new MenuEvent(type , data);
}
}
******
package
{
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
public class Categories
{
private var dispatcher:EventDispatcher;
public function Categories(dispatcher:EventDispatcher):void
{
this.dispatcher = dispatcher;
//for this example, i dispatch the event here
//so you don't have to create a button...
dispatcher.dispatchEvent(new MenuEvent(MenuEvent.CATEGORY , "salads" ));
}
private function clickHandler(event:MouseEvent):void
{
//for instance , in the "salads" category...
dispatcher.dispatchEvent(new MenuEvent(MenuEvent.CATEGORY , "salads" ));
}
}
}
******
package
{
import flash.events.EventDispatcher;
public class MenuItems
{
private var dispatcher:EventDispatcher;
public function MenuItems(dispatcher:EventDispatcher):void
{
this.dispatcher = dispatcher;
dispatcher.addEventListener(MenuEvent.CATEGORY , menuEventHandler);
}
private function menuEventHandler(event:MenuEvent):void
{
trace(event.data as String);
}
}
}
ディスパッチャーを使用して2つのクラスを持つ簡単な例を教えてください。私はまだ少し初心者であり、本当にこのことについて私の頭を包んでいません。私はすべてのクラスが1つのクラスから拡張され、この1つのクラスを通して、他のすべてのクラスに話すことができるPHPに慣れていました。これまでのところ私はこれを使い続けているので、とてもイライラしています - >>>(MovieClipとしてthis.parent).someFunction()、すべてのデータを親に戻します。それはあまり効率的ではありません。 – 1337holiday
私はやったと思ったが、私は答えを編集して詳細を与えた:)私は本当にそれをテストしていないので、何も足りないことを願っていない。 – PatrickS
これは素晴らしいです!ありがとう、まさに私が必要なもの:) – 1337holiday