[FlashPlayer10]お尻プルルン

Tags:

Flash Player 10で新しく使えるようになったグラフィックメソッドのdrawTrianglesを使ってみた。まだ完全に理解してないのだけど、このメソッドでおそらくポリゴン表面に画像貼付けたりできるようになると思う。画像歪ませるのが簡単になった。

[FLASH 10]お尻プルルン
[FLASH 10]お尻プルルン (要Flash Plaeyer 10)

ソース。

package {
    /*
    * Requires Flex SDK 3.0.1 or later to be compiled
    */
    import __AS3__.vec.Vector;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;

    [SWF(width="550",height="400",backgroundColor="0×0",frameRate="24")]

    public class Astro08 extends Sprite{
        [Embed(source="img/girl.jpg")]
        private var TestImage:Class;

        private var img:Bitmap;
        private var container:Sprite;

        //true for mouse down, otherwise false.
        private var flgMouseDown:Boolean;

        //true for mouse rollover, otherwise false.
        private var flgMouseOver:Boolean;

        //drawTriangles
        private var vertices:Vector.<Number>;
        private var indices:Vector.<int>;
        private var uvts:Vector.<Number>;

        //The origin of springing motion
        private var initP:Point;

        //Velocities of springing motion
        private var velocities:Vector.<Number> = Vector.<Number>([0,0]);

        public function Astro08(){
            img = new TestImage();
            initImage(img.width*0.5,img.height*0.5);

            container.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
            container.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
            container.addEventListener(MouseEvent.MOUSE_OVER, onRollOver);
            container.addEventListener(MouseEvent.MOUSE_OUT, onRollOut);
            addEventListener(Event.ENTER_FRAME,onEnterFrame);
        }

        private function initImage(w:Number,h:Number):void{
            initP = new Point(w/2,h/2);
            vertices = Vector.<Number>([0,0, w,0, initP.x,initP.y, w,h, 0,h]);
            indices = Vector.<int>([0,1,2, 1,3,2, 2,3,4, 2,4,0]);
            uvts = Vector.<Number>([0,0, 1,0, 1/2,1/2, 1,1, 0,1]);

            //Canvas
            container = new Sprite();
            container.x = stage.stageWidth/2 - w/2;
            container.y = stage.stageHeight/2 - h/2;
            addChild(container);

            container.graphics.beginBitmapFill(img.bitmapData);
            container.graphics.drawTriangles(vertices,indices,uvts);
        }

        private function onEnterFrame(e:Event):void{
            const SPRING:Number = 0.9;
            const FRICTION:Number = 0.8;

            container.graphics.clear();

            if(flgMouseDown && flgMouseOver){
                vertices[4] = container.mouseX;
                vertices[5] = container.mouseY;
            }
            else{
                //Springing motion
                var dx:Number = initP.x - vertices[4];
                var ax:Number = dx*SPRING;
                velocities[0] += ax;
                velocities[0] *= FRICTION;
                vertices[4] += velocities[0];

                var dy:Number = initP.y - vertices[5];
                var ay:Number = dy*SPRING;
                velocities[1] += ay;
                velocities[1] *= FRICTION;
                vertices[5] += velocities[1];
            }

            container.graphics.beginBitmapFill(img.bitmapData);
            container.graphics.drawTriangles(vertices,indices,uvts);
        }

        private function onMouseDown(e:MouseEvent):void{
            flgMouseDown = true;
        }

        private function onMouseUp(e:MouseEvent):void{
            flgMouseDown = false;
        }

        private function onRollOver(e:MouseEvent):void{
            flgMouseOver = true;
        }

        private function onRollOut(e:MouseEvent):void{
            flgMouseOver = false;
        }
    }
}

Related posts:



Trackback URL

Comments

One Response to “[FlashPlayer10]お尻プルルン”

  1. 公式リリースされたFlash Player 10の新機能を試す20本のデモ | ClockMaker Blog on 10 月 15th, 2008 9:52 PM

    […] [FlashPlayer10]お尻プルルン : boreal-kiss.com 応用例のアイデアです(笑) […]

Leave a Reply