※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!
wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)
reflection
effectnon-interactiveReflection of display object
[1日1Wonderfl]8日目: Reflection やってみたよ [1日1Wonderfl]10日目: Camera でも Reflection
- // forked from soundkitchen's [1日1Wonderfl]8日目: Reflection やってみたよ
- // 1日1Wonderfl 10/30日目
- package
- {
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.Graphics;
- import flash.display.GradientType;
- import flash.display.Shape;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.geom.Matrix;
- import flash.media.Camera;
- import flash.media.Video;
- import com.flashdynamix.utils.SWFProfiler;
- [SWF(width=465, height=465, frameRate=30, backgroundColor=0x000000)]
- /**
- *
- */
- public class Main extends Sprite
- {
- public static const CAMERA_WIDTH:Number = 240;
- public static const CAMERA_HEIGHT:Number = 180;
- public static const REFLECT_SCALE:Number = .5;
- public static const REFLECT_MARGIN:Number = 0;
- private var video:Video;
- private var container:Sprite;
- private var film:BitmapData;
- /**
- *
- */
- public function Main()
- {
- addEventListener(Event.ADDED_TO_STAGE, initialize);
- }
- /**
- *
- */
- private function initialize(evt:Event):void
- {
- removeEventListener(Event.ADDED_TO_STAGE, initialize);
- SWFProfiler.init(this);
- container = new Sprite();
- var webCam:Camera,
- original:Bitmap,
- reflect:Bitmap,
- msk:Shape,
- mtx:Matrix,
- g:Graphics;
- // get default web camera.
- webCam = Camera.getCamera();
- // stop process if couldn't found any camera.
- if (!webCam) return;
- // setup camera.
- webCam.setMode(CAMERA_WIDTH, CAMERA_HEIGHT, stage.frameRate >> 1);
- // create and setup video.
- video = new Video(CAMERA_WIDTH, CAMERA_HEIGHT);
- // reverse and fix position.
- video.scaleX *= -1;
- video.x += CAMERA_WIDTH;
- // bind camera.
- video.attachCamera(webCam);
- // create bitmapdata as a snapshot film.
- film = new BitmapData(CAMERA_WIDTH, CAMERA_HEIGHT, true, 0);
- // create original bitmap.
- original = new Bitmap(film);
- container.addChild(original);
- // create reflection bitmap.
- reflect = new Bitmap(film);
- // reverse and fix position.
- reflect.scaleY *= -1;
- reflect.y = REFLECT_MARGIN + (CAMERA_HEIGHT << 1);
- // cache for mask and fade.
- reflect.cacheAsBitmap = true;
- container.addChild(reflect);
- // create mask shape.
- msk = new Shape();
- // fix position.
- msk.y = CAMERA_HEIGHT + REFLECT_MARGIN;
- // cache for mask and fade.
- msk.cacheAsBitmap = true;
- // create matrix.
- mtx = new Matrix();
- mtx.createGradientBox(CAMERA_WIDTH, CAMERA_HEIGHT, Math.PI/2);
- // draw gradient box.
- g = msk.graphics;
- g.beginGradientFill(
- GradientType.LINEAR,
- [0x00, 0x00],
- [REFLECT_SCALE, 0],
- [0, 255 * REFLECT_SCALE],
- mtx
- );
- g.drawRect(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
- g.endFill();
- container.addChild(msk);
- reflect.mask = msk;
- // fix position.
- container.x = (stage.stageWidth - original.width) >> 1;
- container.y = (stage.stageHeight - original.height) >> 1;
- addChild(container);
- addEventListener(Event.ENTER_FRAME, step);
- }
- private function step(evt:Event):void
- {
- film.lock();
- film.fillRect(film.rect, 0);
- film.draw(video, video.transform.matrix);
- film.unlock();
- }
- }
- }
notice: 


