|
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:画面サイズ サンプルの実行結果 |