/ Published in: Other
Expand |
Embed | Plain Text
/* author page:: http://www.trick7.com/blog/2006/07/05-160520.php マウスの位置によって回転 リンケージ名: rect のインスタンスを用意 xmlを使う時は rectNum = xmlObject.length;として init()をxmlロード後に実行 */ //--- ↓src --- import flash.geom.ColorTransform; //Vanishing Point(消失点) var vpX = Stage.width/2; var vpY = Stage.height/2; //矩形の数 var rectNum:Number = 20; //中心軸と配置するムービークリップとの距離 var radius:Number = 150; //Focal Length(焦点距離) var fl:Number = 250; init(); function init():Void { for (var i:Number = 0; i<rectNum; i++) { var rect:MovieClip = attachMovie("rect", "rect"+i, i); var angleInitY:Number = (360/rectNum)*i; //ラジアンに変換 angleInitY = angleInitY*Math.PI/180; var cosInitY:Number = Math.cos(angleInitY); var sinInitY:Number = Math.sin(angleInitY); var initX1:Number = radius*cosInitY-0*sinInitY; var initZ1:Number = 0*cosInitY+radius*sinInitY; rect.x = initX1; rect.y = 0; rect.z = initZ1; rect.number.text=i //pall.swapDepths(0)//中心棒を通す } } function onEnterFrame():Void { if(_root._xmouse>=0&&_root._xmouse<=Stage.width){//ブラウザの別ウィンドウが開かれた時の対策 for (var i:Number = 0; i<rectNum; i++) { var rect:MovieClip = this["rect"+i]; var angleY:Number = (_xmouse-vpX)*0.001; var cosY:Number = Math.cos(angleY); var sinY:Number = Math.sin(angleY); var angleX:Number = (_ymouse-vpY)*0.001; var cosX:Number = Math.cos(angleX); var sinX:Number = Math.sin(angleX); var x1:Number = rect.x*cosY-rect.z*sinY; var z1:Number = rect.z*cosY+rect.x*sinY; var y1:Number = rect.y*cosX-z1*sinX; var z2:Number = z1*cosX+rect.y*sinX; rect.x = x1; rect.y = y1; rect.z = z2; var scale = fl/(fl+rect.z); rect._xscale = rect._yscale=scale*100; rect._x = vpX+(rect.x*scale); rect._y = vpY+(rect.y*scale); //zの値をもとに、重なり順を調整 rect.swapDepths(-rect.z); //奥のムービークリップの明度を下げる var val = Math.min(-5*Math.sqrt(z2),0); rect.transform.colorTransform = new ColorTransform(1, 1, 1, 1, val, val, val, 0); } } }
You need to login to post a comment.
