我试图从一个子类(Wedge.as)调用另一个子类(Circle.as)中的函数。Circle.as由document类(Tree.as)实例化,Wedge.as由Circle.as实例化。我该怎么做呢?这是我的代码:
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?
但这有点难以理解,因为它与我的问题有关。其中一个解决方案有效,但被评论为格式不佳,另一个解决方案不起作用,因此我希望确保我的代码结构正确。
发布于 2011-12-02 06:09:50
通常,父类知道它的子类是可以的,但反之亦然。如果您不遵循这一原则,您将最终创建Circular dependencies,并最终获得紧密耦合且难以维护的代码。因此,关键是防止孩子需要直接调用其父对象的方法。
一种解决方案是使用event-based communication。当在子类中发生某些事情时,它会触发一个事件,父类可以选择是否处理该事件。
例如:
public function Circle()
{
var wedge:Wedge = new Wedge();
wedge.addEventListener(MouseEvent.CLICK, onWedgeClick);
}
private function onWedgeClick(e:MouseEvent) {
deactiveCircle();
}发布于 2011-12-02 05:54:08
只需从Circle类中将wedgeClickHandler附加到楔形成员-它将很好地接收MouseEvent,并且可以直接访问私有函数。
发布于 2011-12-02 05:54:50
不能调用Circle.deactivateCircle(),因为它的可访问性设置为private,而且您的Wedge对象需要具有对要对其调用方法的Circle对象的引用。
https://stackoverflow.com/questions/8348773
复制相似问题