2015-06-30 36 views
0

我想创建5个影片剪辑并添加到舞台。每个动画片段都附有一个文本字段,用于显示动画片段的引用(即,clip1,clip2等)。创建重复的影片剪辑覆盖其参考AS3

我知道如何使用数组来存储对动画片段的引用,但是我想要什么当我点击clip2时,例如,我想要一个特定于clip2的事件。这是行不通的,因为最后一个影片剪辑会将引用覆盖到前面重复的剪辑上。

这里是非常简单的代码

//code below resides on frame 1, Flash IDE 
import com.Jim.util.drawLabel; 
import flash.text.TextFormat; 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

var d:drawLabel;//this is a class that creates the shapes, texts of the mcs 
var f:TextFormat = new TextFormat("Arial"); 

for (var i:int=0; i<4; i++) { 
    d = new drawLabel ; 
    d.idOf=i 
    d.init("i "+i,i,f,50,50*i);//the drawlabel class has a public method that creates the shapes and the text; see below in the class 
    d.addEventListener(MouseEvent.CLICK,checked); 
    addChild(d); 
} 
function checked(e:MouseEvent):void { 
    trace(d.idOf); 
//result of the trace is 3, regardless of which movieclip I clicked on; 
} 

这是drawLabel类

package com.Jim.util{ 

    import flash.display.MovieClip; 
    import flash.display.Shape; 
    import flash.display.GradientType; 
    import flash.geom.Matrix; 
    import flash.text.TextField; 
    import flash.events.MouseEvent; 
    import flash.text.TextFormat; 
    import flash.display.Sprite 

    public class drawLabel extends MovieClip { 


     public var bc:Sprite; 
     public var idOf:Number 
     public var label_txt:TextField; 
     public var theSentence:String; 

     public function drawLabel() { 

     } 
     public function init(theSentence,mc_id,whatFmt,sentenceL:Number=100,sx:Number=0,sy:Number=0,blockSize:Number=50,colorOf:uint=0xcccccc, alphaOf:int=1) { 
      bc = new Sprite(); 
      idOf=mc_id 
      label_txt = new TextField(); 
      bc.graphics.beginFill(colorOf,alphaOf); 
      bc.graphics.drawRect(sx, sy, sentenceL, blockSize); 
      bc.graphics.endFill(); 
      bc.mouseChildren=true 
      bc.buttonMode=true 
      label_txt.x = sx; 
      label_txt.y = sy; 
      label_txt.width = sentenceL; 
      label_txt.height = blockSize; 
      label_txt.multiline = true; 
      label_txt.wordWrap = true; 
      label_txt.border = false; 
      label_txt.type = "dynamic"; 
      label_txt.selectable = false; 
      label_txt.text = theSentence; 
      label_txt.setTextFormat(whatFmt); 
      addChild(bc); 
      bc.addChild(label_txt); 
      bc.addEventListener(MouseEvent.CLICK,clicked); 
     } 
    } 
} 

还要说明一点,我可以只复制创建动画片段到主FLA的功能,有用。但我想为什么在我可以使用该类时添加更多的代码。我希望这是有道理的。

谢谢

+0

在d中只能引用一个对象。 d不能神奇地持有你创建的所有电影的参考,并且也不知道你点击时你指的是哪一个。正确d是对循环中创建的最后一部电影的引用,因为它是最后一个使用d作为变量持有者的电影。 – BotMaster

+0

以及为什么你在调用init函数之前将值赋给idOf,比如d.idOf = i?你也在init函数中分配了这个。 – harilalkm

回答

0

您可以简单地使用Event.currentTarget访问到您当前的对象,所以你可以这样做:

function checked(e:MouseEvent):void { 
    trace(drawLabel(e.currentTarget).idOf); 
} 

希望能有所帮助。

+0

也别忘了添加this.mouseChildren = false;在drawLabel构造函数中。 – harilalkm

+0

@akmozo:非常感谢您!像魅力一样工作。 – FlashV8

+0

@harialkm:谢谢 – FlashV8