イベントをディスパッチしようとしているクラス「ショップ」があります。以前、別のクラス「Buyer」を使用して動作しましたが、新しいクラスでは同じことが機能しません。
イベントをディスパッチする Shop クラスの機能:
public function Select(event:MouseEvent):void
{
trace(ShopName);
dispatchEvent( new SelectEvent(SelectEvent.SHOPSELECT,null,this));
}
コードを実行すると、「ショップ名」が効率的に表示されますがtrace
、イベントがディスパッチされていないようです。そうでなければ、ディスパッチされますが、うまく受信されません。
Shop クラスのディスパッチ イベントのコードを受け取る:
addEventListener(SelectEvent.SHOPSELECT,shopselected,true);
同じメソッドが機能する買い手クラスの関数:
public function Select(event:MouseEvent):void
{
trace(buyerCode);
if(y>=377|| enteredmall)
{
dispatchEvent( new SelectEvent(SelectEvent.BUYERSELECT,this,null));
}
}
バイヤー クラス ディスパッチ イベントの受信コード:
addEventListener(SelectEvent.BUYERSELECT,showselectbuyer,true);
これは機能しますが、Shop クラスのものは機能しません。
両方のクラスの唯一の違いは、CLICK
が異なるオブジェクト上にあることです。Buyer クラスのオブジェクトをクリックするとイベントがディスパッチされますが、Shop クラスのムービークリップがクリックされるとイベントがディスパッチされます。
イベントのバブリングについて学びましたが、コードでそれを正しく行っていると思います。ここで尋ねられた同様の質問を読みましたが、答えが明確ではなかったため、解決策を進める方法がわかりませんでした。
ショップクラスでも機能させるにはどうすればよいですか?
追加情報:
イベント クラスを選択:
package
{
import flash.events.Event;
import flash.utils.getQualifiedClassName;
public class SelectEvent extends Event
{
public static const BUYERSELECT:String = "buyerselect";
public static const SHOPSELECT:String = "shopselect";
public var selectedbuyer:Buyer;
public var selectedshop:Shop;
public function SelectEvent(type:String, selectedbuyer:Buyer=null, selectedshop:Shop=null, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type,bubbles,cancelable);
if(selectedshop==null)
{
this.selectedbuyer= selectedbuyer;
}
else
{
this.selectedshop= selectedshop;
}
}
override public function clone():Event
{
return new SelectEvent (type, selectedbuyer, selectedshop ,bubbles, cancelable);
}
}
}