Accessibility

ActionScript cookbook beta

Dynamically create and loop through MovieClip instances

Problem Summary

You need to dynamically create and then loop through MovieClips.

Solution Summary

Use the DisplayList and DisplayListContainer container methods.

Explanation

ActionScript 2

var numItems:Number = 250;
var stageWidth:Number = Stage.width;
var stageHeight:Number = Stage.height;

var container:MovieClip = createEmptyMovieClip("container", 2);
container.height = stageHeight;
container.width = stageWidth;

function initClips():Void
{
   var clipName:String;
   
   for(var i:Number = 0; i < numItems; i++)
   {
      clipName = "circle_clip_" + i;
      container.attachMovie("circle_mc", clipName, i + 5 );
      randomizeClip(container[clipName]);
   }
   
}

function randomizeClip(clip:MovieClip):Void
{
   clip._x = random(stageWidth);
   clip._y = random(stageHeight);
   clip._xscale = random(200);
   clip._yscale = random(200);
   
   var c:Color = new Color(clip);
   c.setRGB(Math.random() * 0xFFFFFF);
   clip._alpha = random(100);
}

function onEnterFrame():Void
{
   var c:MovieClip;
   
   for(var i:Number = 0; i < numItems; i++)
   {
      c = container["circle_clip_" + i];
      randomizeClip(c);
   }
}

initClips();

ActionScript 3

var container:MovieClip = new MovieClip();
addChild(container);

var numItems:Number = 250;
var stageWidth:Number = stage.stageWidth;
var stageHeight:Number = stage.stageHeight;

function initClips():void
{
   var c:MovieClip;
   for(var i:Number = 0; i < numItems; i++)
   {
      c = new circle_mc();
      randomizeClip(c);
      container.addChild(c);
   }
}

function randomizeClip(clip:MovieClip):void
{
   clip.x = Math.random() * stageWidth;
   clip.y = Math.random() * stageHeight;
   clip.scaleX = Math.random() * 2;
   clip.scaleY = Math.random() * 2;
   
   var c:ColorTransform = new ColorTransform();
   c.color = (Math.random() * 0xFFFFFF);
   clip.transform.colorTransform = c;
   
   clip.alpha = Math.random();
}

function onEnterFrame(event:Event):void
{
   var c:MovieClip;
   
   for(var i:Number = 0; i < numItems; i++)
   {
      c = MovieClip(container.getChildAt(i));
      randomizeClip(c);
   }
}

initClips();

addEventListener(Event.ENTER_FRAME, onEnterFrame);