In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Adobe MAX Japan 2009 城戸さんのデモ再現(5)

---------------------------------------------------------*
*
* Adobe MAX Japan 2009 城戸さんのデモ再現
*
* プレゼン映像はこちら
* http://jp.max.adobe.com/player.html?2-10
*
*---------------------------------------------------------
// forked from littlepad's Adobe MAX Japan 2009 城戸さんのデモ再現(4)
// forked from littlepad's Adobe MAX Japan 2009 城戸さんのデモ再現(3)
// forked from littlepad's Adobe MAX Japan 2009 城戸さんのデモ再現(2)
// forked from littlepad's Adobe MAX Japan 2009 城戸さんのデモ再現(1)
/*---------------------------------------------------------*
 *
 * Adobe MAX Japan 2009 城戸さんのデモ再現
 *
 * プレゼン映像はこちら
 * http://jp.max.adobe.com/player.html?2-10
 *
 *---------------------------------------------------------*/
package {
    import flash.display.*;
    import flash.events.*;
    
    public class Test extends Sprite {
        private var 視点:Object;
        //private var ポイント:Object;
        //private var ボックス:Box;
        private var ボックスたち:Array = new Array();
        private var ポイントたち:Array = new Array();
        
        public function Test(){
            init();
        }
        
        private function init():void {
            視点 = { x:0, y:0, angle:0, zoom:0 };
            ボックス追加();
            
            addEventListener(Event.ENTER_FRAME, モーション);
            addEventListener(Event.ENTER_FRAME, レンダリング);
        }
        
        private function ボックス追加():void {
            for ( var i:uint = 0; i < 20; i++ ) {
                var ポイント:Object = { x:Math.random()*stage.stageWidth - stage.stageWidth/2, y:Math.random()*stage.stageHeight - stage.stageHeight/2 };
                ポイントたち[i] = ポイント;
                
                var ボックス:Box = new Box();
                ボックスたち[i] = ボックス;
                addChild(ボックス);
            }
        }
        
        private function モーション(e:Event):void {
            //ポイント.x += 2;
            視点.angle += 0.01;
            視点.zoom += 0.01;
        }
        
        private function レンダリング(e:Event):void {
            var cos:Number = Math.cos(-視点.angle);
            var sin:Number = Math.sin(-視点.angle);
            for ( var i:uint = 0; i < ボックスたち.length; i++ ) {
                var ポイント:Object = ポイントたち[i];
                var ボックス:Box = ボックスたち[i];
                var 視点からの差:Object = { x:( ポイント.x - 視点.x )*視点.zoom, y:( ポイント.y - 視点.y )*視点.zoom };
                
                ボックス.scaleX = ボックス.scaleY = 視点.zoom;
                ボックス.x = cos * 視点からの差.x - sin * 視点からの差.y + stage.stageWidth/2;
                ボックス.y = sin * 視点からの差.x + cos * 視点からの差.y + stage.stageHeight/2;
            }
        }
    }
}

import flash.display.*;
import flash.text.*;

class Box extends Sprite {
    public function Box() {
        var rect:Shape=new Shape();
        rect.graphics.beginFill(0x000000);
        rect.graphics.lineStyle(0);
        rect.graphics.drawRect(0,0,30,30); 
        rect.graphics.endFill();
        rect.x = -rect.width/2;
        rect.y = -rect.height/2;
        addChild(rect);
        
        var tFld:TextField = new TextField();
        var tFmt:TextFormat = new TextFormat();
        tFmt.color = 0xFFFFFF;
        tFmt.size = 24;
        tFmt.align = TextFormatAlign.CENTER;
        tFld.defaultTextFormat = tFmt;
        tFld.width = rect.width;
        tFld.text = "A";
        tFld.height = tFld.textHeight;
        tFld.x = -tFld.width/2;
        tFld.y = -tFld.height/2;
        addChild(tFld);
    }
}