ActionScript
setTテンプレート
ひとつの関数でたくさんのムービークリップを動かす例です。
SCX=Stage.width;SCY=Stage.height;MTDP=300;lo=0;
var tdp=new Array();

//-------------------- func
function r2xx(r,sp){return sp*Math.cos(r);}
function r2yy(r,sp){return sp*Math.sin(r);}
function xy2r(xx,yy){return Math.atan2(yy,xx)/Math.PI*180;}
function rand(a){return Math.floor(Math.random()*a);}
function randF(a){return Math.random()*a;}
function randX(a){a=Math.floor(Math.random()*(a*2+1))-a;if(a==0){a=1;}return a;}
function wrapvalue(a){return a%360;}
function rgb(r,g,b){return (r<<16)+(g<<8)+b;}
function chgS(mc,s){mc.s=s;mc._xscale=s;mc._yscale=s;}
// cntrBordr
function brdRight(mc){return SCX-mc._width/2;}function brdBottom(mc){return SCY-mc._height/2;}
function brdTop(mc){return mc._height/2;}function brdLeft(mc){return mc._width/2;}
// hideBordr
function hideRight(mc){return SCX+mc._width/2;}function hideBottom(mc){return a=SCY+mc._height/2;}
function hideTop(mc){return -mc._height/2;}function hideLeft(mc){return -mc._width/2;}

//-------------------- setT
function setT(x,y,imgn,t1,pri){
 if(!tdp[pri])tdp[pri]=0;
 na=imgn+pri+"_"+tdp[pri];
 this.attachMovie(imgn,na,pri*MTDP-tdp[pri]);
 ++tdp[pri];if(tdp[pri]==MTDP)tdp[pri]=0;
 this[na].t=t1;
 this[na]._x=x;this[na]._y=y;
 this[na]._alpha=30;
 this[na].h=0;this[na]._xscale=100;this[na]._yscale=100;this[na].s=100;
 this[na].xx=0;this[na].yy=0;this[na].smo=0;

 //----- t init
 switch(t1){/*★1*/
  case 1:this[na].ks=0;
   //this[na].onPress=function(){getUrl("a.html");trace("HI");}
   //this[na].onMouseDown=function(){if(this.ks==0){this.ks=1;}}
   //this[na].onMouseUp=function(){this.ks=0;} 
  break;}
 
 //----- t move
 this[na].onEnterFrame=function(){
  var sx,sy,c,i,cx,cy,w;
  cx=_root._xmouse;cy=_root._ymouse;
  sx=this._x;sy=this._y;
  switch(t1){/*★2*/
   case 1:++sx;
    if(sx>hideRight(this))this.removeMovieClip();
   break;
   case 2:sx+=this.xx;sy+=this.yy;
    this._rotation=wrapvalue(this._rotation+10);
    ax=brdRight(this);if(sx>ax){sx=ax;this.xx=-this.xx;}
    ax=brdLeft(this);if(sx<ax){sx=ax;this.xx=-this.xx;}
    ay=brdBottom(this);if(sy>ay){sy=ay;this.yy=-this.yy;}
    ay=brdTop(this);if(sy<ay){sy=ay;this.yy=-this.yy;}
   break;

    }
  this._x=sx;this._y=sy;
  if(this.smo==0){this._xscale=this.s;this._yscale=this.s;}
 }
 return this[na];
}

//-------------------- Timer
/*tim1._visible=false;
tim1.onEnterFrame=function(){
 if(lo%5==0){
  c=setT(-10,SCY/2+50,"chr1",1,1);chgS(c,30);}
 ++lo;
}*/
for(i=0;i<20;i++){setT(10,10,"chr1",1,1);}
for(i=0;i<20;i++){c=setT(rand(SCX),rand(SCY),"chr1",2,2);c.xx=randX(4);c.yy=randX(4);}
・関数
setT(X座標,Y座標,ムービークリップの識別子名,動き番号,深度):ムービークリップ作成

//----- t initの所(★1)に、「動き番号」ごとのイベントなど初期設定を書きます。
//----- t moveのswitch文の所(★2)に、「動き番号」ごとの動きを書きます。
 ここで使える変数
 sx,sy…座標
 this.s…大きさ
 その他、this._alpha,this._rotationなどムービークリップのプロパティ

グローバル
MTDP:1深度ごとのムービークリップ数
SCX,SCY:画面サイズ


サンプルの実行結果

BACK