1

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

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

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

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

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

4

1 回答 1

0

这就是我通常在我的 Air 项目中处理响应式布局的方式,可能有更聪明的方法,但我认为它会有所帮助:

(1) 创建 Sizes 辅助变量:

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 制作出色的响应式游戏!

于 2015-10-14T19:12:24.940 回答