当设备的自动旋转功能被禁用时,“StageOrientationEvent.ORIENTATION_CHANGE”事件不会触发(调度)。
我正在开发一款只能在 PORTRAIT 模式下运行的游戏。我推测许多用户未选中此选项显示设置。
无论设备设置如何,如何检测屏幕旋转。我应该为此使用加速度计还是有更好的方法?
当设备的自动旋转功能被禁用时,“StageOrientationEvent.ORIENTATION_CHANGE”事件不会触发(调度)。
我正在开发一款只能在 PORTRAIT 模式下运行的游戏。我推测许多用户未选中此选项显示设置。
无论设备设置如何,如何检测屏幕旋转。我应该为此使用加速度计还是有更好的方法?
如果您的游戏必须始终在 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 上从来没有遇到过问题。
虽然我用过这个方法,但我不能把它归功于它,但请看:请看这个帖子
请记住,如果您正在为 iOS 开发,您不能锁定设备方向。您必须添加事件侦听器来处理 iOS 的方向更改。我做的第一个应用程序因为试图锁定方向而被拒绝。