6

我已经为 iOS 构建了一款专为横向模式设计的游戏,它工作得很好,除了如果你将设备转到纵向模式,它就会停在那里,界面只填满屏幕的中半部分。如何强制应用程序只允许两种横向模式,而不是停在纵向位置。

我已经尝试了所有发布设置。纵横比设置为横向并选中自动方向,如果我取消选中应用程序不会旋转到其他横向模式的自动方向并且我听说这是来自 Apple 的自动拒绝。

除了这个小缺陷之外,该应用程序已准备就绪。谢谢你尽你所能的帮助。

富有的

4

3 回答 3

11

几天前,我在 Adob​​e 论坛上找到了答案。

将纵横比设置为自动。

将自动方向设置为允许。

然后在主剪辑上使用此代码:

var startOrientation:String = stage.orientation;
if (startOrientation == StageOrientation.DEFAULT || startOrientation == StageOrientation.UPSIDE_DOWN)
  {
    stage.setOrientation(StageOrientation.ROTATED_RIGHT);
  }
  else
  {
    stage.setOrientation(startOrientation);
  }                    

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, orientationChangeListener);

function orientationChangeListener(e:StageOrientationEvent)
{
   if (e.afterOrientation == StageOrientation.DEFAULT || e.afterOrientation ==  StageOrientation.UPSIDE_DOWN)
   {
     e.preventDefault();
   }
}

对我来说工作得很好..

于 2011-07-03T02:32:57.743 回答
2

另一种虽然类似的方法是在应用程序描述符中将 aspectRatio 设置为 Landscape,并将 autoOrients 设置为 false。然后在应用程序加载后启用 autoOrients 并监听orientationChanging 事件。在 Flash Builder 4.6 中,可以按如下方式完成:

描述符:

<aspectRatio>landscape</aspectRatio>
<autoOrients>false</autoOrients>

申请代码:

private function applicationCompleteHandler():void {
    stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING, stageOrientationChangingHandler);
    stage.autoOrients = true;
}

private function stageOrientationChangingHandler(event:StageOrientationEvent):void {
    if (event.afterOrientation == StageOrientation.DEFAULT || event.afterOrientation == StageOrientation.UPSIDE_DOWN) {
        event.preventDefault();
    }
}

看起来您还必须确保应用程序具有明确的维度;否则,即使舞台没有重新定向,视图仍然可以调整大小。

请参阅: http ://bugs.adobe.com/jira/browse/SDK-32082

于 2012-01-11T16:07:43.943 回答
1

上面的答案对我不起作用,因为在 iOS 上 preventDefault 不再起作用。

对于那些仍然没有好运的人......这就是我所做的。

我想了:

Ipad 和所有 Android 平板设备能够纵向或横向并在任何方向自动旋转

Iphone、Ipods 和所有小屏幕设备强制横向(或者在您的情况下您可能想要强制纵向)。

我做到了:

在我的 -app.xml 中:

<aspectRatio>any</aspectRatio>
<autoOrients>true</autoOrients>

在动作脚本中:

        var screenDPI:Number = Capabilities.screenDPI;
        var resolutionX:Number = Capabilities.screenResolutionX;
        var resolutionY:Number = Capabilities.screenResolutionY;            
        var numDiagonalDistance:Number = Math.round(Math.sqrt((resolutionX*resolutionX)+(resolutionY*resolutionY)));            
        var numDiagonalInches:Number = numDiagonalDistance/screenDPI;


            if(numDiagonalInches<6){
                MainData.SMALL_DEVICE=true;
            }else{
                MainData.SMALL_DEVICE=false;                        
            }


        if(MainData.SMALL_DEVICE){
            this.stage.setAspectRatio(StageAspectRatio.LANDSCAPE);
        }

虽然我猜你可以很容易地放置 StageAspectRatio.PORTRAIT 甚至使用反向逻辑来仅逻辑 ipad 或其他东西。祝你好运!

已编辑:我实际上正在编辑它,因为即使这种方法仍然存在问题。你会得到风景,但它并不总是面向你如何拿着设备的风景......

再次编辑(2014 年 2 月 27 日):如果我包含 -swf-version 23(现在使用 AIR 4.0),这个问题终于解决了。

于 2013-05-24T18:02:21.353 回答