我为iOS设计了一款专为横向模式设计的游戏,除了如果你将设备转为纵向模式,它停在那里,界面只填充屏幕的中间一半。如何强制应用程序仅允许两种横向模式而不是停在纵向位置。
我已尝试过所有发布设置。如果我取消选中应用程序未旋转到其他横向模式的AU到方向,并且我听到Apple自动拒绝,则会为横向和自动方向设置宽高比设置。
除了这个小瑕疵之外,这个应用程序已经准备好了。感谢您提供的任何帮助。
富
答案 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();
}
}
看起来您还必须确保应用程序具有明确的维度;否则,即使阶段不重新调整,视图仍可能会调整大小。
答案 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),这个问题终于解决了。