Flash 生成器中 AIR 模拟器的设备分辨率错误

发布于 2024-12-11 22:31:11 字数 536 浏览 0 评论 0原文

我有这样的问题:我正在使用 Adob​​e AIR 2.6 和 Flash Builder 4.5 编写 Android 应用程序。我需要根据移动设备分辨率扩展我的资源。为此,我需要了解设备分辨率和 DPI。我正在使用这样的代码来获取它:

PlatformUtil.init(mainView.stage.stageWidth, mainView.stage.stageHeight, 
                Capabilities.screenDPI, mainView);

当我在设备上运行此代码时 - 一切正常!所有资源均已正确扩展(在 Nexus One 上)。 但是,当我在我的 desctop 计算机上的 flash builder 模拟器上运行它,并从设备 Google Nexus One 中进行选择时,它的分辨率必须为 800*480,但在代码中我得到的实际大小为 500*375。 当我使用 Capability 类时,它返回 1024*768 (我的桌面分辨率)。 那么,这有什么问题吗?为什么它返回错误的设备分辨率?我该如何解决这个问题? 感谢您的帮助。

I have such a problem: I'm writing application for Android using Adobe AIR 2.6 and Flash Builder 4.5. I need to scale my resources depending on mobile device resolution. For this purpose I need to know device resolution and DPI. I'm using such a code to get it:

PlatformUtil.init(mainView.stage.stageWidth, mainView.stage.stageHeight, 
                Capabilities.screenDPI, mainView);

When I run this code on device - all OK! All resources scaled properly (on Nexus One).
But when I run it on my desctop computer on flash builder simulator, and choose from devices Google Nexus One - it must have resolution 800*480, but in code I get actual size 500*375.
When I'm using Capabilities class, it returns me 1024*768 (my desctop resolution).
So, whats wrong with it? Why it returns me wrong device resolution? How can I solve this problem?
Thanx for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

面犯桃花 2024-12-18 22:31:11

我解决了这个问题。模拟器在 Event.RESIZE 的处理程序中返回有效的模拟器屏幕分辨率,可以这样做:

public class Main extends Sprite
    {       
        public function Main()
        {
            super();

            //register to add to stage
            this.stage.addEventListener(Event.RESIZE, onResize);
            this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            // support autoOrients
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
        }

        private function onAddedToStage(event:Event):void
        {
            this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }

        private function onResize(event:Event):void
        {
            this.stage.removeEventListener(Event.RESIZE, onResize);

            //width must be bigger then height, because we in landscape mode
            var w:int = Math.max(this.stage.stageWidth, this.stage.stageHeight);
            var h:int = Math.min(this.stage.stageWidth, this.stage.stageHeight);

            //draw black background
            with( graphics ) 
            {
                beginFill(0x0)
                drawRect(0,0,w,h);
            }

            init();
        }
}

希望它能帮助像我这样的人。

I solved this issue. Simulator returns valid simulator screen resolution in handler on Event.RESIZE, this can be done like this:

public class Main extends Sprite
    {       
        public function Main()
        {
            super();

            //register to add to stage
            this.stage.addEventListener(Event.RESIZE, onResize);
            this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            // support autoOrients
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
        }

        private function onAddedToStage(event:Event):void
        {
            this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }

        private function onResize(event:Event):void
        {
            this.stage.removeEventListener(Event.RESIZE, onResize);

            //width must be bigger then height, because we in landscape mode
            var w:int = Math.max(this.stage.stageWidth, this.stage.stageHeight);
            var h:int = Math.min(this.stage.stageWidth, this.stage.stageHeight);

            //draw black background
            with( graphics ) 
            {
                beginFill(0x0)
                drawRect(0,0,w,h);
            }

            init();
        }
}

Hope it will help someone like me.

日裸衫吸 2024-12-18 22:31:11

您总是看到 500x375 作为宽度和高度的原因是因为这些是 mxmlc 编译器的默认值(特别是 -default-size 选项)。有关详细信息,请参阅此处:

http://livedocs.adobe。 com/flex/3/html/help.html?content=compilers_13.html

除非您提前知道移动设备的实际尺寸(这不太可能),否则您必须等待 Event。调整大小在获取stage.stageHeight之前触发。您应该在 stage 对象上监听 Event.RESIZE

The reason you are always seeing 500x375 as your width and height is because those are the default values of the mxmlc compiler (specifically the -default-size option). See here for details :

http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_13.html

Unless you know the actual dimension of the mobile device ahead of time (which is unlikely), you have to wait for Event.RESIZE to fire before fetching stage.stageHeight. You should listen to Event.RESIZE on the stage object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文