设备上的 as3 空气和屏幕尺寸检测问题

Posted

技术标签:

【中文标题】设备上的 as3 空气和屏幕尺寸检测问题【英文标题】:as3 air and screen size dection issue on devices 【发布时间】:2014-03-04 03:44:52 【问题描述】:

我非常努力地开发了一款可以在我的 Galaxy Note 3 上完美显示的应用程序。但是,它无法在 iPhone 和我测试过的另一个 Droid 上正确显示。我的问题是 addChild() 然后调整它的大小以适应屏幕。出于某种原因,当我添加背景时 (addBG(); 屏幕尺寸有效,但如果我将 addChild 加载到 BG,这在我的 Note 3 上效果很好,但在 iPhone 或其他 android 设备上效果不佳。

我的问题是我创建的 screenX, screenY var。对于设备,它们似乎有所不同。或者我不确定这是一个“渲染顺序问题”。对于解决此问题的帮助将非常感激,因此它在每部手机上看起来都很棒。我已经阅读了一些关于这个主题的 tuts,但它们令人困惑。我认为我的代码很接近,我希望,也许它只需要调整。 !

这是 iPhone 上关于屏幕的截图。看到白色不适合整个屏幕。

这是我的 Droid Note 3 的截图。

包中声明的变量:

这当然不是我的完整代码,但只是我认为相关的代码。

public var screenX:int;
public var screenY:int;


   public function Main()
    
        if (stage)
        

            setStage();
            addBG();    
        
    

    public function setStage()
    
        stage.scaleMode = StageScaleMode.NO_SCALE;
        stage.align = StageAlign.TOP_LEFT;

        if (flash.system.Capabilities.screenResolutionX > stage.stageWidth)
        
            screenX = stage.stageWidth;
            screenY = stage.stageHeight;
        
        else
        
            screenX = flash.system.Capabilities.screenResolutionX;
            screenY = flash.system.Capabilities.screenResolutionY;
        
    

这有效:addBG();

            public function addBG()
    
        theBG = new BG();
        addChild(theBG);
        theBG.width = screenX;
        theBG.height = screenY;
    

这不是:addAbout();

public function addAbout()
        

            About = new viewAbout();
            About.width = screenX;
            About.height = screenY;
            theBG.addChild(About);
            TweenMax.fromTo(About,1, alpha:0, alpha:1, ease:Expo.easeOut  );

        

更新:另一个更复杂的负载也从一个按钮调用并且有同样的问题。我希望你能看到我正在尝试做的事情的逻辑。首先将 BG 设置为设备,然后加载并调整内容大小以按比例适合我加载的 BG。原因是,BG会扭曲成不同的比例,没关系,但内容不行。因此,这里是将内容加载到 BG 中,然后将内容加载到该容器中的示例。

public function addRosaryApp()
        
            Rosary = new viewRosaryApp();
            Rosary.width = screenX;
            Rosary.height = screenY;
            theBG.addChild(Rosary);
            TweenMax.fromTo(Rosary,1, alpha:0, alpha:1, ease:Expo.easeOut  );

            contentRosary = new contentRosaryApp();
            theBG.addChild(contentRosary);
            contentRosary.width = screenX;
            contentRosary.scaleY = contentRosary.scaleX;
            contentRosary.x = screenX/2 - contentRosary.width/2;
            contentRosary.y = menuBanner.height;    
         

【问题讨论】:

如果你跟踪你的 screenX/screenY,你是否得到了正确的 iphone 值? 是的,它就像 600 x 900 或者我忘记的东西。它是一个iphone 4s。它适用于 BG,非常适合屏幕。所以也许我在想这是一个加载问题,或者 iPhone 并不总是看到 screenX 和 ScreenY 的值 你应该使用 stage.fullscreenWidth, fullscreenHeight。有什么区别吗? 我会试试的。 :) 然后回复你。 负载正常,但我在上面添加了更多示例,因为我还需要在页面上加载内容,并且无法拉伸。看来 screenX 仍然无法正常工作。 :( 【参考方案1】:

您是否尝试过先将孩子添加到舞台,然后再设置大小?这是我在 addBG 和 addAbout 之间看到的唯一区别

        About = new viewAbout();
        theBG.addChild(About); // do this first
        About.width = screenX; // then set width 
        About.height = screenY; // and height

【讨论】:

我认为你正在做某事。我注意到它正在被缩放,因为内容正在被缩放。所以如果它被挤压,新添加的内容也会被挤压。要解决它,我想我可以简单地做一个 addChild(menuBanner);在顶部,而不是在 BG 内添加内容,这是我真正需要的。我的问题是,如果我这样做,我会添加一个新实例,还是只是将它移到顶部,这就是我想要的? 如果它是同一个变量,它会“移动”它……意思是,它会“重生”它。但是,如果它仍然附加到另一个父级,它会抛出一个异常,所以你需要安全地处理它 好的,那应该可以了。但是,如果我确实需要它,我不知道如何安全地处理它。 你可以做一些类似的事情; if(menuBanner.parent != null)menuBanner.parent.removeChild(menuBanner); xxxxxx.addChild(menuBanner);【参考方案2】:

我认为您的问题可能与几件事有关。 到目前为止,我对自己的设备(Ipad Air、iphone 4S、LG G2 和 Acer Iconia A500)的发现是,唯一始终正确报告的设备尺寸是 stage.fullScreenWidthstage.fullScreenHeight

第一,Android 将 Capabilities.screenResolutionX 报告为 Android 设备的 LONG 端。 然而,ios 设备将设备的 SHORT 端报告给 Capabilities.screenResolutionX

第二,stage.stageWidth 和 stage.stageHeight 似乎在 Android 和 IOS 上都报告了错误的尺寸。 事实上,如果您检查这些 beforeafter 设置 stage.scaleModestage.align 那么这些值将完全不同(尽管 Android 会几乎正确地显示它)。

我的建议是您为您的应用设置一个基本尺寸(宽度和高度),然后将其与设备报告的实际 stage.fullScreenWidth 和 stage.fullScreenHeight 进行比较。这样你就可以得到一些很好的缩放比例来缩放你的显示对象。这就是我目前在我的应用程序上使用的,它的扩展性很好:-)

【讨论】:

以上是关于设备上的 as3 空气和屏幕尺寸检测问题的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 如何支持多种屏幕尺寸?

如果宽度大于屏幕尺寸,iOS/Android 上的高度也会改变(约束问题)

检测屏幕高度并裁剪全尺寸图像

android 版本为 2.2.1 和 2.3.5 且屏幕尺寸为 240 * 320 和屏幕尺寸为 480 * 800 的 Android 设备如何使用媒体查询?

不同屏幕尺寸的 iOS 缩放约束

Android 模拟器没有检测到正确的屏幕尺寸?