调整starling手机游戏的大小以适应多种分辨率。

时间:2014-02-15 22:13:25

标签: actionscript-3 flash mobile air starling-framework

我使用Starling框架在AS3中编写了一个游戏。它专为移动设备而设计,因此支持大量屏幕非常重要。我已经编写了所有代码以支持许多大小,但我遇到了麻烦,我似乎无法在网上找到解决方案。

舞台重新缩放和资产重新缩放效果很好,但问题是这一行:

[SWF(framerate="60", width="768", height="1024", backgroundColor="0x333333")]

设置SWF大小会使应用程序永久认为它位于768 x 1024的显示器上。因此,如果我在iPhone而不是ipad上运行它,应用程序将运行,但只会填充第一个1024px高度并且将会在640px宽度上运行。但是,如果我用iPhone分辨率对上面的行进行硬编码,它看起来会很棒。所以我的问题是如何动态完成?我试过没有运气的resize事件监听器。正如我所说,我的问题不是在阶段,而是在SWF的初始阶段。下面是我的整个初始化类。请让我知道我失踪的是什么!谢谢!

[SWF(framerate="60", width="768", height="1024", backgroundColor="0x333333")]

public class FlappyBird2 extends Sprite
{
    private var myStarling:Starling;

    public function FlappyBird2()
    {
        super();
        stage.fullScreenSourceRect = new Rectangle(0, 0, Capabilities.screenResolutionX, Capabilities.screenResolutionY);
        stage.displayState = StageDisplayState.FULL_SCREEN;

        var viewPortRectangle:Rectangle = new Rectangle();
        viewPortRectangle.width = stage.stageWidth;
        viewPortRectangle.height = stage.stageHeight;

        trace("screen res: X: "+ Capabilities.screenResolutionX + "Y: " + Capabilities.screenResolutionY);
        myStarling = new Starling(Game, stage, viewPortRectangle);
        myStarling.antiAliasing = 1;
        myStarling.start();

    }

3 个答案:

答案 0 :(得分:1)

试试这个。如果你正在使用多种分辨率,你只需要有SCALE_FACTOR分区,否则删除分区。

  var viewPort : Rectangle = new Rectangle(0, 0, stage.fullScreenWidth, stage.fullScreenHeight);

  //create the main instance of starling
  engine = new Starling(_root, stage, viewPort);

  //main configs
  engine.stage.stageWidth     = viewPort.width / SCALE_FACTOR;
  engine.stage.stageHeight    = viewPort.height / SCALE_FACTOR;

我希望这会对你有所帮助。 这里还有一个有趣的教程http://wiki.starling-framework.org/manual/multi-resolution_development;否则你应该检查Starling论坛,他们在那里有很多类似的问题。

干杯

答案 1 :(得分:0)

显然缩放的东西不会让你走得太远。

有很多方法可以解决这个问题,但通常需要遵循一些MVC模式,将逻辑和数据与UI绘画分开。

完成后,您可以:

  • 通过代码或配置文件为每个屏幕分辨率创建不同的视图
  • 使UI绘画动态化,使其适应任何分辨率和屏幕DPI

根据您的项目,其中一个选项(或组合)将更适合您。

答案 2 :(得分:0)

简单..

转过身来:

[SWF(framerate="60", width="768", height="1024", backgroundColor="0x333333")]

到此:

[SWF( frameRate="60", backgroundColor="0x333333")]