【问题标题】:Detect which MovieClip on the stage when they appear randomly当它们随机出现时检测舞台上的哪个MovieClip
【发布时间】:2014-02-11 10:00:25
【问题描述】:

我正在用 AS3 制作游戏。

我有一个“Dechets”类,其中 3 个movieClips 随机出现。

    public var _classes:Array = new Array(coco1, coco2, coco3,coco4);
    public var _cocoMovieClips:Array = new Array(); 

    public function cocoAppear(event : TimerEvent):void{
    var cocoMc:DisplayObject = new _classes[Math.floor(Math.random() * _classes.length)]();
    _cocoMovieClips.push(cocoMc);
    stageRef.addChild(cocoMc);
    cocoMc.addEventListener(MouseEvent.CLICK, removeCoco, false, 0, true); 
                trace( getOnStage() );

}
        public function removeCoco(event:MouseEvent):void{
var cocoMc:DisplayObject = event.target as DisplayObject;
    if (!cocoMc) return; // typecast failed
    cocoMc.parent.removeChild(cocoMc);
            trace(cocoMc);
}

那么,你知道我该怎么写吗

    if(cocoMc == "coco4"){
    doSomething();

}

?

感谢您的帮助

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    如果您只想知道您的阵列中的哪个在舞台上:

    function getOnStage():DisplayObject
    {
        for(var i:int = 0; i < _classes.length; i++)
        {
            if(_classes[i] is DisplayObject)
            {
                var o:DisplayObject = _classes[i] as DisplayObject;
                if(stage.contains(o)) return o;
            }
        }
    
        return null;
    }
    

    像这样使用:

    trace( getOnStage() );
    

    【讨论】:

    • 另外,看看这些,因为我觉得你将来会需要这些; flash.utils.getQualifiedClassNameflash.utils.getDefinitionByName
    • 谢谢。但是你给我的代码有错误。错误 1170:函数不返回值。知道为什么吗?
    • 游戏从你给我的更新函数开始,但是当函数被调用时我得到了这个错误:错误 #1034: Type Coercion failed: cannot convert coco1$ to flash.display.MovieClip
    • 这是因为 coco1 在一个数组中.. 但我需要这样才能与 coco2、coco3..ect 随机添加它有解决方案吗?
    • @user2421975 你的意思是coco1_classes 内吗?
    【解决方案2】:

    问题是什么?

    您想知道舞台上的对象是什么?当您将它们从舞台上移除时,可能会尝试从数组中移除它们,或者如果您想保留第一个包含所有项目,请为此创建第二个数组。

    例如:

    public function removeCoco(event:MouseEvent):void
    {
        var cocoMc:DisplayObject = event.target as DisplayObject;
    
        if (!cocoMc) return;
    
        cocoMc.parent.removeChild(cocoMc);
    
        // get the index of the cocoMc in the array
        var i:int = _cocoMovieClips.indexOf( cocoMc );
        // remove the cocoMc from the array
        if( i != -1 )    _cocoMovieClips.splice( i, 1 );
    
        // if you want to check the type of your mc
        if( cocoMc is coco4 )         doSomething();
        else if( cocoMc is coco3 )    doSomethingElse();
    }
    

    之后你就可以追踪你的数组了:

    trace( _cocoMovieClips );
    

    如果你有很多类型要测试,你可以替换:

    // if you want to check the type of your mc
    if( cocoMc is coco4 )         doSomething();
    else if( cocoMc is coco3 )    doSomethingElse();
    

    作者:

    var classe:String = getQualifiedClassName( cocoMc);
    classe = classe.substring( classe.lastIndexOf(':')+1 );
    switch( classe )
    {
        case 'coco1': doSomething1(); break;
        case 'coco2': doSomething2(); break;
        case 'coco3': doSomething3(); break;
        case 'coco4': doSomething4(); break;
    }
    

    【讨论】:

    • 完美!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多