动态加载MovieClip的命名实例

时间:2010-08-18 16:32:14

标签: flash dynamic instance movieclip

我正在尝试命名动态加载的MovieClip实例。

我试过这样做:

comp = new Comp();                //并尝试这样做 - > var comp:MovieClip = new Comp();
   comp.name =“comp”; // comp是我想要实例的名称

但是在OUTPUT窗口中:

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;

  }


 } 
}

3 个答案:

答案 0 :(得分:0)

使用以下代码测试相同的代码:

    comp = new MovieClip();

如果有效,您可能需要导入Comp类

答案 1 :(得分:0)

以下是一些潜在的问题:

1)我没有在任何地方看到Comp类的import语句。这是Flash中MovieClip的链接名称吗?否则,您需要导入它。

2)由于你在一个类中,当你为一个类创建属性时(基本上是由类的定义声明的变量,比如你的comp变量),你需要使用public或private关键字。而不是

var comp:MovieClip;
你会说:

private var comp:MovieClip;

3)DisplayObjects(comp.name)的name属性是READ-ONLY。你不能设置它。

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);
}

答案 2 :(得分:0)

我已经接受了你的代码并尝试复制错误,但一切正常!这是我做的:

  • 在Flash CS5中创建了一个新的AS3项目
  • 创建了一个名为ToggleTest.as的文档类,并将代码复制到其中
  • 创建名为Comp的MovieClip并选中“Export for Actionscript”,类名为Comp
  • 创建了一个实例名称为outfield
  • 的TextField

我没有得到任何错误,Comp实例被添加到舞台,外场显示了一些文字

点击Comp后,我得到了以下跟踪声明:

movieClip Instance Name = [object Comp]
2
undefined
由于

未定义是返回

trace(houseArray[0]);

houseArray是一个对象,因此我将trace语句更改为此

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

所以点击Comp:

movieClip Instance Name = [object Comp]
2
2

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

似乎问题出在其他地方,试着像上面那样做,用最小的设置启动一个新项目,你不应该重现错误,然后添加新元素直到错误回来