flash as3拖动剪辑时,提供的DisplayObject必须是调用者的子节点

所有我想要做的就是设置拖动我的电影剪辑,但我一直收到这个错误:
The supplied DisplayObject must be a child of the caller.
这是我的代码:
projectThumb.addEventListener( MouseEvent.MOUSE_DOWN, onThumbPress );
projectThumb.addEventListener( MouseEvent.MOUSE_UP, onThumbRelease );

function onThumbPress( e:MouseEvent ):void
{
    setChildIndex( e.target as MovieClip, numChildren - 1 );
    e.target.startDrag();
}

function onThumbRelease( e:MouseEvent ):void
{
    e.target.stopDrag();
}
    
已邀请:
您调用的唯一函数会抛出该错误是
setChildIndex
。很可能
e.target as MovieClip
正在返回
null
。 确保你保证
e.target
始终是有效的
MovieClip
(如果类型不匹配,请记住
as
将返回
null
),或在那里添加
null
的支票。     
凯说什么...... 只是想添加它可能导致它的原因。 如果单击拇指(实际拇指),则它是一个Bitmap对象。所以目标不是MovieClip。尝试在调试模式下运行它以确保是这种情况。您还可以添加跟踪
flash.utils.getQualifiedClassName(e.target)
以查看ti是什么。如果要转换非相关类(非MovieClip或MovieClip派生类),那么您将获得null。 你可以做一个while语句来查找作为projectThumb的父项,或者只是假设它是父项。另一种方法是添加透明按钮,覆盖projectThumb的大小,以便你知道调用click事件监听器是什么 尝试...
projectThumb.addEventListener( MouseEvent.MOUSE_DOWN, onThumbPress );
projectThumb.addEventListener( MouseEvent.MOUSE_UP, onThumbRelease );

function onThumbPress( e:MouseEvent ):void
{
    var target:MovieClip = findPT(e.target as DisplayObject) as MovieClip;
    if(target){
        setChildIndex(target, numChildren - 1 );
        target.startDrag();
    }
}

function onThumbRelease( e:MouseEvent ):void
{
    var target:MovieClip = findPT(e.target as DisplayObject) as MovieClip;
    if(target){
        target.stopDrag();
    }
}

function findPT($mc:DisplayObject):DisplayObject{
    while (1){
        if ($mc is ProjectThumb){ // <- this is to check for the right class
             return $mc;
        }else if($mc.parent == null){
            return null
        }else{
            $mc = $mc.parent as DisplayObject;
        }
    }
    return null
}
    

要回复问题请先登录注册