Forked from: yd_niku's 3D演習その1 diff:21 3D演習その2 +Zモーション ActionScript3.0Animation読みながら、とりあえず3D投影してみる。 Z軸で動かしてみる yd_niku forked:2favorite:2lines:82license : All rights reserved modified : 2009-02-08 21:59:17 Embed Tweet // forked from yd_niku's 3D演習その1 package { // ActionScript3.0Animation読みながら、とりあえず3D投影してみる。 // Z軸で動かしてみる import flash.display.Sprite; import flash.display.DisplayObject; import flash.events.Event; import caurina.transitions.Tweener; public class FlashTest extends Sprite { private var renderList:Array = []; private var screenX:Number; private var screenY:Number; public function FlashTest() { stage.frameRate = 60; screenX = stage.stageWidth/2; screenY = stage.stageHeight/2; setup(); addEventListener( Event.ENTER_FRAME, render ); putThemFar(); } private function setup():void { var xNum:uint = 8; var yNum:uint = 8; var zNum:uint = 10; var xInterval:uint = 50; var yInterval:uint = 50; var zInterval:uint = 50; for( var i:int=0; i<xNum; ++i ) { for( var j:int=0; j<yNum; ++j ) { for( var k:int=0; k<zNum; ++k ) { createBall( (i-xNum*0.5)*xInterval, (j-yNum*0.5)*yInterval, (k-zNum*0.2)*zInterval ); } } } } private function createBall( sx:Number, sy:Number, sz:Number ):void { var sp :Sprite = new Sprite(); sp.graphics.lineStyle(0,0xffffff); sp.graphics.beginFill(0xcc6600); sp.graphics.drawCircle( 0, 0, 10 ); sp.graphics.endFill(); addChild( sp ); renderList.push( { x: sx, y: sy, z: 0, tz:sz, view:sp }); } private function putThemFar():void { var l:uint = renderList.length; for( var i:uint=0; i<l; ++i ) { var obj:Object = renderList[i]; var view:DisplayObject = obj.view; var tz:Number= obj.tz; Tweener.addTween( obj, { z: tz, time:4, transition:"easeInOutQuart" } ); } } private var focus:uint = 250; private function render(e:Event):void { renderList.sortOn( "z", Array.DESCENDING|Array.NUMERIC ); var l:uint = renderList.length; for( var i:uint=0; i<l; ++i ) { var obj:Object = renderList[i]; if( obj.z > -focus ) { var scale :Number= focus/(focus+obj.z); obj.view.x = screenX + obj.x * scale; obj.view.y = screenY + obj.y * scale; obj.view.scaleX = obj.view.scaleY = scale; obj.view.alpha = Math.min( 1, scale ); obj.view.visible = true; this.setChildIndex( obj.view, i ); } else { obj.view.visible = false; } } } } } Code Fullscreen Preview Fullscreen paO OKASUKE : 3D3Dの勉強 3D visible alpha scaleY scaleX addEventListener sortOn Array.NUMERIC Object Math.min Tweener.addTween time push length Event.ENTER_FRAME Array uint Event int Number sort new page view favorite forked pv245 forked from: 3D演習その2 +Zモーション AFFA forked:0 favorite:0lines:82 (diff:1) pv5658 3D演習その3 +Camera3Dの回転 yd_niku forked:3 favorite:3lines:167 (diff:170) tag: 3D