我想从另一个子类(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