我想從另一個子類(Wedge.as)調用一個子類(Circle.as)中的函數。 Circle.as由文檔類(Tree.as)實例化,Wedge.as由Circle.as實例化。我該怎麼做呢?這是我的代碼:在另一個子類中的一個子類中閃存as3調用函數
Tree.as
package com.treediagram
{
public class Tree extends MovieClip
{
var firstCircle:Circle = new Circle();
addChild(firstCircle);
}
}
Circle.as:
package com.treediagram
{
public class Circle extends MovieClip
{
private var wedge:Wedge;
public function Circle()
{
var circleHolder:MovieClip = new MovieClip();
var circleClip:MovieClip = new MovieClip();
circleClip.addEventListener(MouseEvent.CLICK,circleClickedEvent);
}
private function circleClickedEvent(e:MouseEvent):void
{
var wedgeHolder:MovieClip = new MovieClip();
circleHolderRef.addChildAt(wedgeHolder,1);
var wedge:Wedge = new Wedge(wedgeHolderRef);
wedge.addEventListener(MouseEvent.CLICK,wedgeClickEvent);
}
private function wedgeClickEvent(e.target){
trace ('click'); //NOT WORKING
}
}
}
Wedge.as
package com.treediagram
{
public class Wedge extends MovieClip
{
public function Wedge(wedgeHolderRef)
{
var wedgeClip:MovieClip = new MovieClip();
wedgeClip.addEventListener(Event.ADDED_TO_STAGE, wedgeAddedEvent);
wedgeHolderRef.addChild(wedgeClip);
}
}
}
我看到了類似的問題,這在這裏:
How to call a function in a Class from another Class?
但它有點難以遵循,因爲它涉及到我的問題。其中一個解決方案奏效,但被評論爲不良形式,另一個解決方案無法正常工作,所以我想確保我的代碼能夠正確構建。
您可能希望從Wedge類派遣自定義事件並進行捕獲。因此,在「handleWedgeClick」函數中,只需調用「this.dispatchEvent(new Event(」wedgeClick「));」然後聽取「wedgeClick」而不是MouseEvent.CLICK。 – Glenn
@panupan - 問題是我需要聽取楔形對象內部的東西的點擊,而不是楔形本身。 – mheavers
你好,在這種情況下,你需要使用事件冒泡。這允許事件實際上通過視圖層級「冒泡」。這是Responder Chain設計模式的一個實現,其中消息沿着鏈傳遞(在本例中爲視圖層次結構),爲每個對象在傳遞消息之前處理它提供機會。看看這個簡單的例子得到一個想法:http://blog.152.org/2009/11/flash-actionscript-3-event-bubbling.html – panupan