【问题标题】:AS3 Accessing a movieclip that is inside of another movie clip and a childAS3 访问位于另一个影片剪辑和一个子项中的影片剪辑
【发布时间】:2014-07-04 16:24:36
【问题描述】:

我希望标题不会太混乱。 我知道您可以访问另一个影片剪辑中的影片剪辑,就像我所做的那样;

function allowResourceCollection():void {
    caveman.btn_CollectResources2.addEventListener(TouchEvent.TOUCH_TAP, checkResourceCollection);
}

但我现在已经更改了它,以便在影片剪辑 caveman 内部有另一个影片剪辑 cavemanmenu 是 AS Linkage btncavemanMenu 和内部cavemanmenubtn_CollectResources2 所以我尝试了以下方法;

function allowResourceCollection():void {
    caveman.cavemanmenu.btn_CollectResources2.addEventListener(TouchEvent.TOUCH_TAP, checkResourceCollection);
}

我得到了这个错误;

TypeError:错误 #1009:无法访问 null 的属性或方法 对象引用。在 stoneApp_new_fla::MainTimeline/allowResourceCollection()[stoneApp_new_fla.MainTimeline::frame1:104]

我对发生的事情感到非常困惑。我要做的就是点击caveman,弹出cavemanmenu,我可以点击嵌套在btn_CollectResources2中的强>穴居人菜单。这是该部分中的所有代码,以便您理解;

var myMovieClip:MovieClip = new btncavemanMenu();
//Caveman Menu
function allowTapCaveman():void {
    caveman.addEventListener(TouchEvent.TOUCH_TAP, cavemanMenu);
}
function cancelTapCaveman():void {
    caveman.removeEventListener(TouchEvent.TOUCH_TAP, cavemanMenu);
}
function cavemanMenu(event:TouchEvent):void {
    addChild(myMovieClip);
    myMovieClip.x = caveman.x;
    myMovieClip.y = caveman.y;
    //myMovieClip.addEventListener(TouchEvent.TOUCH_TAP, cavemanMenu);
    //caveman.gotoAndStop(2);
    //trace('2');
    if (caveman.currentFrame == 2){
        cancelTapCaveman();
        allowTapCavemanClose();
    }
}
function allowTapCavemanClose():void {
    caveman.addEventListener(TouchEvent.TOUCH_TAP, cavemanMenuClose);
}
function cancelTapCavemanClose():void {
    caveman.removeEventListener(TouchEvent.TOUCH_TAP, cavemanMenuClose);
}
function cavemanMenuClose(event:TouchEvent):void {
    cancelTapCavemanClose();
    removeChild(myMovieClip);
    //caveman.gotoAndStop(1);
    allowTapCaveman();
    //trace('1');
}
function allowResourceCollection():void {
    caveman.btncavemanMenu.btn_CollectResources2.addEventListener(TouchEvent.TOUCH_TAP, checkResourceCollection);
}
function cancelResourceCollection():void {
    caveman.btn_CollectResources2.removeEventListener(TouchEvent.TOUCH_TAP, checkResourceCollection);
}
function checkResourceCollection(event:TouchEvent):void {
    if(remaningActions >= 1){
        spawnWood();
        spawnFood();
        spawnStone();
        remaningActions -= 1;
        updateTextBox();
    }
    if(remaningActions <= 0){
        trace("not enough actions")
    }
}

如您所见,我曾经拥有它,所以它只会更改电影剪辑 caveman 中的帧,但因为我需要创建多个 caveman,所以我需要无论他们身在何处,都能够在他们下方弹出菜单,并创建一个孩子并将其带入,这是我能找到的唯一方法。谢谢。

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    事件冒泡,因此调度 MovieClip 的深度无关紧要。其实让caveman处理比较容易。

    function allowResourceCollection():void {
      caveman.addEventListener(TouchEvent.TOUCH_TAP, checkResourceCollection);
    }
    

    我强烈建议遵循命名约定...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 2017-06-24
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多