2010-05-10 35 views
3

我是一个新手,我已经在这方面进行了数周的尝试,并且我无法控制这一点。下面的简单代码给出了“提供的DisplayObject必须是调用者的子代”错误。提供的DisplayObject必须是调用者的孩子

var square = new squareObj; 
addChild(square); 
addEventListener(Event.ENTER_FRAME, removeSquare); 

function removeSquare(evt:Event):void { 
    removeChild(square) 
} 

squareObj是导出为AS的库中的动画片段。如何修改这段代码以使其正常工作? 我想这是我的知识,我正在缺乏适当的oop,所以任何有关此问题的好教程的链接都会很感激。

问候H

回答

6

问题是输入帧侦听器将被一遍又一遍地调用。第一次它被称为DisplayObject将确实是调用者的孩子,但之后它不会(因为它已被删除)。

所以我建议你做:

var square = new squareObj; 
addChild(square); 
addEventListener(Event.ENTER_FRAME, removeSquare); 

function removeSquare(evt:Event):void { 
    if (contains(square)) { 
     removeChild(square) 
    } 
} 

要么检查,如果方的确是this

var square = new squareObj; 
addChild(square); 
addEventListener(Event.ENTER_FRAME, removeSquare); 

function removeSquare(evt:Event):void { 
    removeEventListener(Event.ENTER_FRAME, removeSquare) 
    removeChild(square) 
} 

儿童或删除事件侦听器,这取决于你是否需要事件除了去除方块以外的东西。另外你应该注意到,你可能根本看不到这个方块,因为它在被添加后会很快被移除。

相关问题