2010-08-18 28 views
0

我想命名的影片剪辑,我动态加载的实例。命名影片剪辑实例的动态加载

我试图这样做:

排版=新小样(); //并且还试图这样做 - >无功补偿:MovieClip的=新小样();
comp.name = “COMP”; //补偿的名称是我想要的实例是

但在输出窗口:

ReferenceError: Error #1056: Cannot create property comp on ToggleTest. 
at flash.display::Sprite/constructChildren() 
at flash.display::Sprite() 
at flash.display::MovieClip() 
at ToggleTest() 

这是我在我的ActionScript文件中的代码: 包 {

import flash.display.MovieClip; 
    import flash.events.MouseEvent; 
    import flash.events.Event; 

public class ToggleTest extends MovieClip 
{ 
    var comp:MovieClip; 

    public function ToggleTest() 
    { 

    comp = new Comp(); 
    //var comp:MovieClip = new Comp(); 
    comp.name = "comp"; 

    comp.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle); 
    comp.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle); 
    comp.addEventListener(MouseEvent.CLICK, toggleClick); 
    comp.bstate = 0; 
    comp.buttonMode = true; 

    // Add Movie Clip "buttons" to stage 
    stage.addChild(comp); 

    comp.x = 120; 
    comp.y = 130; 


    // calls function frameloop 
    stage.addEventListener(Event.ENTER_FRAME, frameloop); 

    } 

    // function rolloverToggle 
    function rolloverToggle(e:MouseEvent) { 
    if (e.currentTarget.currentFrame == 1) 
    e.currentTarget.gotoAndStop(2); 
    if (e.currentTarget.currentFrame == 3) 
    e.currentTarget.gotoAndStop(4); 
    } 

    // function rolloutToggle 
    function rolloutToggle(e:MouseEvent) { 
    if (e.currentTarget.currentFrame == 2) 
    e.currentTarget.gotoAndStop(1); 
    if (e.currentTarget.currentFrame == 4) 
    e.currentTarget.gotoAndStop(3); 
    } 

    // function toggleClick 
    function toggleClick(e:MouseEvent) { 


    var houseArray:Object = {lightA: 1, 
     lightB: 1, 
     lightC: 1, 
     lightD: 1, 
     lightE: 1, 
     comp: 2, 
     tv: 3, 
     stove: 4, 
     laundry: 5}; 

    var powerData:int = houseArray[e.currentTarget.name.toLowerCase()]; 


    trace("movieClip Instance Name = " + e.currentTarget); 
    trace(powerData); 
    trace(houseArray[0]); 

    // how to find out which object selected 

    if (e.currentTarget.currentFrame == 2) 
    { 
    e.currentTarget.gotoAndStop(3); 
    e.currentTarget.bstate = 1; 
    } 

    if (e.currentTarget.currentFrame == 4) 
    { 
    e.currentTarget.gotoAndStop(1); 
    e.currentTarget.bstate = 0; 
    } 
    } 

    function frameloop(e:Event) 
    { 
    var outtext:String=""; 
    outtext += comp.bstate +", "; 
    outfield.text = outtext; 

    } 


} 
} 

回答

0

我采取了你的代码,并尝试复制错误,但一切工作正常!下面是我所做的:

  • 创建在Flash CS5
  • 一个新的AS3项目创建了一个名为ToggleTest文档类。作为和复制你的代码到它
  • 创建了一个名为小样影片剪辑,并检查“为ActionScript导出”以创建一个文本字段与外场

我没有一个实例名称比较

  • 的类名得到任何错误,添加了比较实例的舞台和外野显示一些文本

    点击比较后,我得到了以下跟踪语句:

    movieClip Instance Name = [object Comp] 
    2 
    undefined 
    

    不确定是因为这

    trace(houseArray[0]); 
    

    houseArray的回报是一个对象,所以我这么一下比较后更改了跟踪语句来此

    trace(houseArray[e.currentTarget.name]); 
    

    movieClip Instance Name = [object Comp] 
    2 
    2 
    

    现在,我不明白你得到的错误。如果无法找到Comp类,则会收到错误“调用可能未定义的方法Comp”。

    看来问题是在其他地方,尽量做到上面一样,开始一个新项目以最少的设置,你不应该能够重现错误,然后加入新的元素,直到错误回来

  • 0

    测试相同的代码与以下:

    comp = new MovieClip(); 
    

    如果我牛逼的作品,您可能需要导入比较级

    0

    这里有一些潜在的问题:

    1)我没有看到一个import语句比较类的任意位置。这是闪存中MovieClip的联系人名称吗?否则,您将需要导入它。

    2)既然你在一个类中的时候,当你的属性一类(基本上就由类的定义声明,喜欢你的补偿变量),你需要使用公共或私人关键字变量。因此,而不是

    var comp:MovieClip; 
    

    你会把:

    private var comp:MovieClip; 
    

    3)的DisplayObject(comp.name name属性)是只读的。你不能设置它。

    4)你不能访问舞台,直到ToggleTest已添加到它。因此,在构造函数中为ADDED_TO_STAGE添加一个监听器,然后将comp添加到舞台上。所以就像:

    public function ToggleTest() 
    { 
        addEventListener(Event.ADDED_TO_STAGE, _added); 
    } 
    
    private function _added(e:Event):void 
    { 
        removeEventListener(Event.ADDED_TO_STAGE, _added); 
    
        comp = new Comp(); 
    
        comp.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle); 
        comp.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle); 
        comp.addEventListener(MouseEvent.CLICK, toggleClick); 
        comp.bstate = 0; 
        comp.buttonMode = true; 
        comp.x = 120; 
        comp.y = 130; 
    
        // Add Movie Clip "buttons" to stage 
        stage.addChild(comp); 
    
        // calls function frameloop 
        stage.addEventListener(Event.ENTER_FRAME, frameloop); 
    } 
    
    +0

    “DisplayObjects(comp.name)的name属性是只读的,您不能设置它。” 这是不正确的,请检查文档,名称属性是可读写的! “你需要再次使用public或private关键字” false,如果你没有定义一个访问修饰符,它默认在内部 – PatrickS 2010-08-18 17:45:24

    +0

    中链接的comp MovieClip - 我导出了Comp类。 – jc70 2010-08-18 17:57:07

    +0

    @PatrickS尝试自己设置名称属性,它不会让你。另外你是对的,你不必使用公开的私人关键字,但它是一个最好的做法,在我的脑海中应该始终使用。 – Obto 2010-08-18 18:03:53