2012-09-13 54 views
1

我刚开始使用闪光灯,所以这可能是一件简单的事情,所以请耐心等待。Flash as3在点击时显示特定的影片剪辑

我正在做一个项目,我有一张地图,你可以点击地图上的地方,信息出现。我可以设法将每个button_btn链接到每个info_mc,但这会花费很长时间,所以我试图创建一个读取按钮名称并重定向到info_mc本身的函数。但是,由于名称在从name_mc更改为name_info时正在转换为字符串,因此不会重定向。这是代码。

winterfell_info.visible = false; 

    map.winterfell_btn.doubleclickEnabled = true; 
    map.winterfell_btn.mouseChildren = doubleClickEnabled; 
    map.winterfell_btn.addEventListener(MouseEvent.DOUBLE_CLICK, show_clicked); 

    function show_clicked(e:MouseEvent):void{ 
     var get_name = e.currentTarget.name; 
     var open_info_string = get_name.slice(0,-3) + "info"; 
     //I've tried some things here but nothing is working for me. 
     var open_info = stage.getChildByName(open_info_string); 
     open_info.visible = true;  
    } 

任何帮助将非常感谢,谢谢。

如果你想知道是它的权利的游戏地图。

+0

您确定舞台是“open_info_string”的父级吗?因为'getChildByName()'不是递归的。你确定你创建它时给了它“Winterfell_info”的名字吗?因为设置'.name'属性与引用mc的变量命名不同。 – JcFx

回答

0

作为第一个措施,除去“open_info_string”周围的引号,并将该字符串中的大写字母S更改为正常的“s”,因为Actionscript区分大小写。

var open_info = stage.getChildByName(open_info_string); 

然后,如果它不会马上开始工作,插入​​试图达到影片剪辑,以找出是否被正确裁剪之前。

+0

谢谢,但仍然无法正常工作,“无法访问空对象引用的属性或方法”。和trace()给了我winterfell_info这正是我想要的 –

+0

看,我看你已经改变了一些问题。现在。您现在将“open_info_string”变量设置为有用的内容,例如“help_info”,但您正在搜索名为“open_info_string”的影片剪辑!你需要了解什么是变量,什么不是。如果你写'stage.getChildByName(open_info_string);'你要求一个名称包含在名为“open_info_string”的变量中的对象,但是当你编写'stage.getChildByName(“open_info_string”);'你在问对于名称等于“open_info_string”的对象,这是一个常量。 – Vesper

+0

我现在明白了,我修好了,谢谢。但它仍然可以工作。 –

0

我做了类似的事情。我没有时间去调整代码,但如果你看看我在这里做了什么,我相信它会帮助你。我用我的视频播放器上的对象的实例名称创建一个数组,然后创建一个函数,使用switch case语句添加相应的事件侦听器。在我看来,最简单的方法是大规模完成此操作。

var buttons:Array = [clicky,pauseBtn,playBtn]; 

for (var i in buttons) 
{ 
    buttons[i].buttonMode = buttons[i].useHandCursor = true; 
    addEventListner(buttons[i]); 
} 

function addEventListner(movieClip) 
{ 
    movieClip.addEventListener(MouseEvent.CLICK, function(e){ 
    e.stopPropagation(); 
    switch (movieClip.name) 
    { 
    case "playBtn" : 
    youTubeHolder.videoPlayer.playVideo(); 
    videoController.playBtn.visible = false; 
    videoController.pauseBtn.visible = true; 
    break; 

    case "pauseBtn" : 
    youTubeHolder.videoPlayer.pauseVideo(); 
    videoController.playBtn.visible = true; 
    videoController.pauseBtn.visible = false; 
    break; 

    case "stopBtn" : 
    youTubeHolder.videoPlayer.seekTo(0); 
    youTubeHolder.videoPlayer.stopVideo(); 

    break; 

    default : 
    trace(movieClip.name+"is not a valid button"); 
    } 


    }); 
}