AS3 - 仅限iOS强制横向模式?

时间:2011-07-02 19:50:49

标签: actionscript-3 landscape autorotate

我为iOS设计了一款专为横向模式设计的游戏,除了如果你将设备转为纵向模式,它停在那里,界面只填充屏幕的中间一半。如何强制应用程序仅允许两种横向模式而不是停在纵向位置。

我已尝试过所有发布设置。如果我取消选中应用程序未旋转到其他横向模式的AU到方向,并且我听到Apple自动拒绝,则会为横向和自动方向设置宽高比设置。

除了这个小瑕疵之外,这个应用程序已经准备好了。感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:11)

我几天前在Adobe论坛上找到了答案。

将宽高比设置为自动。

将自动方向设置为允许。

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

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();
   }
}

对我来说很好..

答案 1 :(得分:2)

另一种(虽然类似)这样做的方法是在应用程序描述符中将aspectRatio设置为横向,并将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

答案 2 :(得分:1)

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

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

我想:

Ipad&amp;所有Android平板电脑设备都可以纵向或横向显示,并可在任何方向自动旋转

Iphones,Ipods,&amp;所有小屏幕设备都被强制横向(或者在您的情况下,您想要强制肖像)。

我做了:

在我的-app.xml中:

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

在Actionscript中:

        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或甚至反向逻辑用于逻辑ipads或其他东西。祝你好运!

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

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