【问题标题】:Nape - Keeping the same physics behaviour over different screen sizesNape - 在不同的屏幕尺寸上保持相同的物理行为
【发布时间】:2015-10-17 20:20:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 为了具有相同的物理影响,对象需要保持完全相同的大小。试图相应地改变它们的质量是行不通的。只需使用比例因子来更改来自引擎的所有数字。在(您选择的)基本屏幕尺寸中,比例因子将为 1,在 1.2 倍大的屏幕中,比例因子将为 1.2,依此类推......

标签: actionscript-3 starling-framework nape


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多