0

当设备的自动旋转功能被禁用时,“StageOrientationEvent.ORIENTATION_CHANGE”事件不会触发(调度)。

我正在开发一款只能在 PORTRAIT 模式下运行的游戏。我推测许多用户未选中此选项显示设置。

无论设备设置如何,如何检测屏幕旋转。我应该为此使用加速度计还是有更好的方法?

自动旋转屏幕

4

2 回答 2

1

如果您的游戏必须始终在 PORTRAIT 模式下运行;那么您不必担心设备方向的变化。您要做的是确保无论设备设置如何,您的游戏始终以纵向模式启动。

在应用程序描述符文件中;设置这些值:

<aspectRatio>portrait</aspectRatio>
<autoOrients>false</autoOrients>

应用程序描述符文件是Flash Builder 将在您创建主应用程序时创建的“ MainApplication -app.xml”文件。

在文档理论中,这些更改应该做到;但如果我没记错的话,我在某些版本的 Android 中遇到了问题,应用程序以错误的方向启动并且不会改变。

因此,在我的应用程序中,我在主应用程序文件中添加了 applicationComplete 和 activate 处理程序,并使用这些方法来指定游戏的纵横比。像这样的东西:

<s:ViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
applicationComplete="viewnavigatorapplication1_applicationCompleteHandler(event)"
activate="viewnavigatorapplication1_activateHandler(event)"> 
<fx:Script><![CDATA[
    import mx.events.FlexEvent;

    protected function viewnavigatorapplication1_applicationCompleteHandler(event:FlexEvent):void{
      this.stage.setAspectRatio( StageAspectRatio.PORTRAIT);
    }

    protected function viewnavigatorapplication1_activateHandler(event:Event):void{
      if(this.stage){
        this.stage.setAspectRatio( StageAspectRatio.PORTRAIT );
      }
}

]]></fx:Script>
</s:ViewNavigatorApplication>

我不记得在 iOS 设备上测试过这个特定的用例;所以有可能我只在Android上遇到了问题。或者我可能先编写了 Android 代码,这就是为什么我在 iOS 上从来没有遇到过问题。

于 2013-03-02T02:45:11.783 回答
0

虽然我用过这个方法,但我不能把它归功于它,但请看:请看这个帖子

请记住,如果您正在为 iOS 开发,您不能锁定设备方向。您必须添加事件侦听器来处理 iOS 的方向更改。我做的第一个应用程序因为试图锁定方向而被拒绝。

于 2013-03-02T01:49:25.270 回答