代码之家  ›  专栏  ›  技术社区  ›  bman

Flex 4.6中禁用设备的自动旋转功能时,手柄方向发生变化

  •  0
  • bman  · 技术社区  · 13 年前

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

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

    如何在不考虑设备设置的情况下检测屏幕旋转。我应该使用加速度计还是有更好的方法?

    Auto-rotate screen" option in Display settings of Google Nexus

    2 回复  |  直到 13 年前
        1
  •  1
  •   JeffryHouser    13 年前

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

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

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

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

    在文献理论中,这些变化应该起作用;但如果我能记住的话,我在某些版本的安卓系统中遇到了问题,该应用程序以错误的方向启动,不会改变。

    因此,在我的应用程序中,我在主应用程序文件上添加了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代码,这就是为什么我在iOS上从来没有遇到过问题。

        2
  •  0
  •   Community Mohan Dere    9 年前

    尽管我使用了这种方法,但我不能因此而受到赞扬,但请参阅: Please see this thread

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

    推荐文章