スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ActionScript 3.0] 画像円柱回転

2007-11-01 | 21:09

丸ビルRSSリーダーの真似(?)をして画像が回って見えるようにしてみた。
(そのつもりで見ないと円柱に沿って回っているように見えないのが難点)

package {
    import flash.display.*;
    import flash.filters.*;
    import flash.events.*;
    import flash.net.*;
    import flash.text.*;
    import flash.utils.*;
    import flash.geom.*;
 
    [SWF(width="600", height="350", backgroundColor="#000000")]
    public class Main extends Sprite{

        [Embed(source="wmn0021-024_m.jpg")]
            private var pic:Class;
        [Embed(source="lena.jpg")]
            private var pic2:Class;
        [Embed(source="445-enmusubi.jpg")]
            private var pic3:Class;
        [Embed(source="939-df651105.jpg")]
            private var pic4:Class;

        private var bitmapSlices:Array = new Array();
        private var baseAngle:Number = 0.0;
        private var vr:Number = 0.01;
        public function Main():void
        {
            init(new Array(new pic(), new pic2(), new pic3(), new pic4()));

            doRound();

            var t:Timer = new Timer(100);
            t.addEventListener(TimerEvent.TIMER, function(e:Event):void{
                    baseAngle += vr;
                    doRound();
                    });
            t.start();

            stage.addEventListener(MouseEvent.MOUSE_MOVE, function(e:MouseEvent):void{
                     vr = (e.stageX  > 0) ? e.stageX / 20000 : 0;

                    });
        }

        private function init(bitmaps:Array):void{

            for each (var bm:Bitmap in bitmaps){
                for(var i:int =0; i < bm.width; i++){
                    var slicedBitmapData:BitmapData = new BitmapData(1,bm.height,true,0x00000000);

                    var rect:Rectangle = new Rectangle(i,0,1,bm.height);
                    slicedBitmapData.copyPixels(bm.bitmapData,rect,new Point(0,0));	
                    var slicedBitmap:Bitmap = new Bitmap(slicedBitmapData);
                    bitmapSlices.push(slicedBitmap);

                    addChild(slicedBitmap);
                }
            }
        }
        private function doRound():void{

            var r:int = bitmapSlices.length / (Math.PI*2);
            var i:int = 0;
            var theta:Number;
            for each(var bm:Bitmap in bitmapSlices){
                theta= i / r + baseAngle;
                //trace(theta);
                theta = theta % (Math.PI * 2);
                bm.x = r*Math.cos(theta) + 300;
                    //bm.y = r*Math.sin(theta)*0.02 + 50;
                if(theta < Math.PI){
                    bm.visible = false;
                }else{
                    bm.visible = true;
                }
                i++;
            }
            trace(theta);
        }

    }
}


スポンサーサイト

Comment

Post a comment

Secret

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。