jasu's blog
블로그 메뉴글
Starling에서 resize 적용
Programming/Framework
2012. 1. 4. 16:16
Starling를 이용하여 렌더링을 할 경우 stage의 width, height를 변경하더라도 렌더링 되고 있는 픽셀의 크기는 변경되지 않는다. 따라서 렌더링 되고 있는 Starling의 stage 사이즈를 변경하기 위해서는 아래와 같이 Starling.current.viewPort의 Rectangle 값을 변경해 줘야 한다.
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.geom.Rectangle; import starling.core.Starling; import flash.events.Event; public class Startup extends Sprite { private var mStarling:Starling; public function Startup() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; mStarling = new Starling(Demo, stage); mStarling.enableErrorChecking = false; mStarling.start(); stage.addEventListener(Event.RESIZE, onResizeHandler); addChild(new Gaze(true, "http://jasu.tistory.com")); } private function onResizeHandler(e:Event):void{ var viewPortRectangle:Rectangle = new Rectangle(); viewPortRectangle.width = stage.stageWidth; viewPortRectangle.height = stage.stageHeight; Starling.current.viewPort = viewPortRectangle; } } }이렇게 viewPort의 사이즈를 변경하면 resize 이벤트를 통해서 stage의 width, height 사이즈가 변경된 사이즈로 렌더링 된다. 그러나 렌더링되는 실제 해상도에는 변함이 없기 때문에 강제로 resize한 것처럼 스케일 비율이 무시된다. (stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; 로 설정을 했더라도 Starling(Stage3D)을 통해서 렌더링되는 영역은 별도) 따라서 아래와 같이 mStarling.stage의 stageWidth, stageHeight 값도 변경해야 실제 렌더링하려는 픽셀 사이즈를 확보할 수가 있다.
private function onResizeHandler(e:Event):void{ var viewPortRectangle:Rectangle = new Rectangle(); viewPortRectangle.width = stage.stageWidth; viewPortRectangle.height = stage.stageHeight; Starling.current.viewPort = viewPortRectangle; mStarling.stage.stageWidth = stage.stageWidth; mStarling.stage.stageHeight = stage.stageHeight; }