这就是我通常在我的 Air 项目中处理响应式布局的方式,可能有更聪明的方法,但我认为它会有所帮助:
(1) 创建尺寸辅助变量:
package
{
import starling.errors.AbstractClassError;
public class Sizes
{
public function Sizes() { throw new AbstractClassError(); }
public static const SAFE_WIDTH:int = 320;
public static const SAFE_HEIGHT:int = 480;
public static var fullWidth:Number = 0;
public static var fullHeight:Number = 0;
public static var centerX:Number = 0;
public static var centerY:Number = 0;
public static var remainderWidth:Number = 0;
public static var remainderHeight:Number = 0;
public static var halfRemainderWidth:Number = 0;
public static var halfRemainderHeight:Number = 0;
}
}
(2) 然后在您的主类初始化程序(您在其中实例化 Starling)中,当您的阶段准备就绪时添加此代码:
Sizes.scaleToScreen = Math.min( stageWidth / Sizes.SAFE_WIDTH, stageHeight / Sizes.SAFE_HEIGHT );
Sizes.remainderWidth = ( stageWidth / Sizes.scaleToScreen ) - Sizes.SAFE_WIDTH;
Sizes.remainderHeight = ( stageHeight / Sizes.scaleToScreen ) - Sizes.SAFE_HEIGHT;
Sizes.halfRemainderWidth = Sizes.remainderWidth / 2;
Sizes.halfRemainderHeight = Sizes.remainderHeight / 2;
Sizes.fullWidth = stageWidth / Sizes.scaleToScreen;
Sizes.fullHeight = stageHeight / Sizes.scaleToScreen;
Sizes.centerX = Sizes.fullWidth/2;
Sizes.centerY = Sizes.fullHeight/2;
(3) 修改 Starling 实例的 Root 类,通过设置屏幕比例:
public function start(background:Texture, bgRect:Rectangle, assets:AssetManager):void
{
// the asset manager is saved as a static variable; this allows us to easily access
// all the assets from everywhere by simply calling "Root.assets"
sAssets = assets;
var bg:Image = new Image( background );
bg.width = bgRect.width / Sizes.scaleToScreen;
bg.height = bgRect.height / Sizes.scaleToScreen;
scaleX = scaleY = Sizes.scaleToScreen; // where the magic happens :)
addChild(bg);
...
(4) 最后,使用一组帮助器,更具体地说,使用第一个 Sizes.scaleToScreen 来匹配 Starling 和显示列表比例。
// You can now scale your debug Bitmap to match your starling stage scale:
debug = new BitmapDebug(Sizes.fullWidth, Sizes.fullHeight, 0, true);
debug.display.scaleX = debug.display.scaleY = Sizes.scaleToScreen;
Starling.current.nativeOverlay.addChild(debug.display);
因此,为了回答您的问题,使用这种技术,您可以在任何缩放的屏幕尺寸中包含的恒定安全边界(在本例中为 320x480)内工作。
希望能帮助您和其他人使用 Starling 和 Nape 制作出色的响应式游戏!!