/ Published in: ActionScript 3
A simple Camera 2d simulation in Flash
Expand |
Embed | Plain Text
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.geom.Matrix; public class Camera extends MovieClip { private var mainCont:Sprite; private var stageW:Number; private var stageH:Number; private var camW:Number = 800; //Width of camera private var camH:Number = 600; //Height of camera private var cam:Sprite; public function Camera(mainCont:Sprite) { this.mainCont = mainCont; cam = new Sprite(); cam.graphics.beginFill(0xFF0000, 0); cam.graphics.drawRect( -camW * .5, -camH * .5, camW, camH); cam.graphics.endFill(); addChild(cam); init(); } private function init():void { stageW = mainCont.stage.stageWidth; stageH = mainCont.stage.stageHeight; addEventListener(Event.REMOVED_FROM_STAGE, dispose); addEventListener(Event.ENTER_FRAME, update); dispatchEvent(new Event(Event.ENTER_FRAME)); } private function update(e:Event):void { if (!mainCont) return; var w:Number = this.width * this.scaleX; var h:Number = this.height * this.scaleY; var sX:Number = stageW / w; var sY:Number = stageH / h; var matrix:Matrix = this.transform.matrix.clone(); matrix.invert(); matrix.scale(cam.scaleX, cam.scaleY); matrix.translate(w * .5, h * .5); matrix.scale(sX, sY); mainCont.transform.matrix = matrix; mainCont.transform.colorTransform = this.transform.colorTransform; mainCont.filters = this.filters; } private function dispose(e:Event):void { removeEventListener(Event.REMOVED_FROM_STAGE, dispose); removeEventListener(Event.ENTER_FRAME, update); removeChild(cam); cam = null; } } }
You need to login to post a comment.
