Как получить название MovieClip на этапе Flash, которое было создано динамически? - PullRequest
2 голосов
/ 18 августа 2010

Есть несколько мувиклипов, которые будут динамически размещаться на сцене. Эти мувиклипы закодированы как кнопки. Я пытаюсь выяснить - когда пользователь нажимает на мувиклип ... выяснить, на какой объект на этапе флэш-памяти щелкнул пользователь.

Внутри функции toggleClick ставлю оператор трассировки:

trace("movieClip Instance Name = " + e.target.name);

В окне ВЫХОД:

movieClip Instance Name = instance5 
movieClip Instance Name = instance12 
movieClip Instance Name = instance5 
movieClip Instance Name = instance32 
movieClip Instance Name = instance5 
movieClip Instance Name = instance59 

Это не похоже на название клипа, по которому щелкнули.

Является ли getChildByName () способом сделать это? Если да, есть идеи, как использовать getChildByName (), чтобы получить название клипа MovieClip, по которому щелкнули?

Ответы [ 2 ]

7 голосов
/ 18 августа 2010

Перед добавлением кнопки на сцену вы можете назвать ее

  var myButton:MovieClip = new MovieClip();
  myButton.name = 'button1';

или

  var myButton:MovieClip = new MyButton(); //if you assigned a class name to your MovieClip
  myButton.name = 'button1';

На вашем примере вы можете сделать что-то вроде этого:

  var comp:Comp = new Comp();
  var monitor:Monitor = new Monitor();

  addItemButton( comp, "comp" , {x:100, y:200});
  addItemButton( monitor, "monitor" , {x:30 , y:50} );


  private function addItemButton(item:MovieClip , itemName:String , params:Object):void
  {
     item.addEventListener(MouseEvent.CLICK , clickHandler );
     item.name = itemName;

     // of course params is not necessary, just making a point of  
     // how to centralize your concerns
     item.x = params.x;
     items.y = params.y;

     addChild( item);
  } 

  private function clickHandler(event:MouseEvent):void
  {
     trace( "button clicked:" + event.currentTarget.name );
  }
2 голосов
/ 18 августа 2010

В AS3, когда вы создаете MovieClip, динамически Flash назначает ему имя экземпляра только для чтения, как вы видели (например, instance12). Лучший способ узнать, по какому клипу кликнули, - просто использовать currentTarget / target для MouseEvent (см. Разницу между ними здесь: http://www.wastedpotential.com/?p=10).

Вы бы использовали это так:

var foo:MovieClip = new MovieClip();
foo.graphics.drawRect(0, 0, 100, 50);
stage.addChild(foo);
foo.addEventListener(MouseEvent.CLICK, clickHandler);

var bar:MovieClip = new MovieClip();
bar.graphics.drawRect(0, 0, 100, 50); bar.y = 100;
stage.addChild(bar);
bar.addEventListener(MouseEvent.CLICK, clickHandler);

//this function will set the x to 100 and the width to 50 of the clicked MovieClip
function clickHandler(e:MouseEvent):void
{
    e.currentTarget.x = 100;
    e.currentTarget.width = 50;
}
...