tarling 中的舞台对象starling.display.Stage将会在屏幕/页面尺寸改变时抛出一个类似的事件,叫做ResizeEvent.RESIZE,
允许你动态地处理屏幕改变时的逻辑。
此例子的基础上,增加屏幕尺寸改变时更新方块位置的功能。
package game
{
import flash.geom.Rectangle;
import starling.core.Starling;
import starling.display.Quad;
import starling.display.Sprite;
import starling.events.Event;
import starling.events.ResizeEvent;
/* Starling 处理屏幕尺寸*/
public class Game2 extends Sprite
{
private var q:Quad;
private var rect:Rectangle = new Rectangle(0,0,0,0);
public function Game2()
{
addEventListener(Event.ADDED_TO_STAGE, onAdded);
}
private function onAdded ( e:Event ):void
{
// listen to the event
stage.addEventListener(ResizeEvent.RESIZE, onResize);
q = new Quad(200, 200);
q.color = 0x00FF00;
q.x = stage.stageWidth - q.width >> 1;
q.y = stage.stageHeight - q.height >> 1;
addChild ( q );
}
private function onResize(event:ResizeEvent):void
{
// set rect dimmensions
rect.width = event.width, rect.height = event.height;
// resize the viewport
Starling.current.viewPort = rect;
// assign the new stage width and height
stage.stageWidth = event.width;
stage.stageHeight = event.height;
// repositions our quad
q.x = stage.stageWidth - q.width >> 1;
q.y = stage.stageHeight - q.height >> 1;
}
}
}
一旦我们的SWF尺寸发生了改变,ResizeEvent.RESIZE事件都会被派发。新的尺寸将会被保存于ResizeEvent事件对象的相应属性中,
我们手动地将这些新尺寸赋值给stageWidth及stageHeight属性。之后我们就可以重新定位舞台中的内容了,所有位置依赖于舞台尺寸
的内容都可以保持相对正确的位置。