我的Flash应用程序如何在所有Android设备中正确匹配?

时间:2013-12-01 02:28:03

标签: android actionscript-3 flash air

我正在为Android设备制作Flash游戏。我让我的游戏符合HTC EVO 4G的尺寸,但是当我在不同的设备上播放时,例如具有不同尺寸的摩托罗拉Droid 2;它没有填满整个屏幕。如何使我的Flash游戏适合所有Android设备的屏幕?

4 个答案:

答案 0 :(得分:1)

您需要避免使用绝对数字。因此,不要将游戏设置为以800px的宽度运行,而是让它在stage.stageWidth运行,并使用调整大小函数(向Event.RESIZE添加stage侦听器)以确保所有内容都适合那。这个想法是完全消除任何硬性价值。一切都应该是相对的。

您还应该避免完全在移动设备上设置舞台大小。我不记得这是否真的可以在AIR中使用。避免设置舞台大小,并避免设置stage.scaleMode

所以你想要集中精力?在800px屏幕上,您可能已将100px宽对象的x值设置为450px。现在,您需要将其设置为(stage.stageWidth - object.width ) / 2。像这样的东西。我的猜测是你必须重写你游戏的重要部分才能做到这一点。

值得注意的是,对于分辨率更高的屏幕,您的资产可能太小。 EVO 4G只有217 dpi。如今,没有高端手机低于320 dpi(iPhone),其中有许多在400年代中期。我相信Android目前支持高达680 dpi。

长话短说,如果你是针对单个屏幕尺寸进行编程,那么你完全错了。您所做的一切,无论是什么设备或平台,操作系统或技术,都应该与屏幕无关。

答案 1 :(得分:1)

可能有一种更简单的方法可以执行此操作,但您可以收听Resize事件,该事件将为您提供正确的舞台大小。触发后,您可以根据新的大小计算新的比例因子,然后将该比例应用于显示对象。 800 x 480只是您要使用的任何分辨率,您可以为这些值制作常量。我已经尝试了它并且它有效,但就像我说的那样可能有一种更简单的方法。

public class MyApp extends Sprite
{

    public static var _scaleFactorX:Number = 1.0;
    public static var _scaleFactorY:Number = 1.0;

    public function MyApp ()
    {
        super();

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

        this.stage.addEventListener(flash.events.Event.RESIZE, resize);
    }

    public function init():void
    {
        // Set up our scale factor
        _scaleFactorX = this.stage.stageWidth / 800;
        _scaleFactorY = this.stage.stageHeight / 480;
    }

    protected function resize(event:Event):void
    {
        this.stage.removeEventListener(flash.events.Event.RESIZE, resize);
        init();
    }
}

答案 2 :(得分:1)

将舞台比例模式设置为"无边框":

import flash.display.StageScaleMode;

 stage.scaleMode = StageScaleMode.NO_BORDER;

答案 3 :(得分:0)

您可以尝试this tutorial

非常简单明确。我对我的项目使用相同的方法并且工作正常。