Nape - 在不同的屏幕尺寸上保持相同的物理行为

时间:2015-07-27 15:04:11

标签: actionscript-3 starling-framework nape

我想知道如何在不同的屏幕尺寸上保持相同的物理行为?

例如,我有一个固定在舞台中间的轮子。 我有一个鼠标枢轴关节,我用来旋转车轮。

滚轮的半径取决于屏幕尺寸,它总是占据屏幕尺寸的一半左右。

现在,当我在更大的屏幕上创建一个轮子时,感觉就像是一个更重的物体。然后在更小的屏幕尺寸上旋转它会更加困难。

我想知道在所有屏幕尺寸上使物理模拟运行完全相同的最佳实践方法是什么?

1 个答案:

答案 0 :(得分:0)

这就是我通常在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制作出色的响应式游戏!!