AS3 - iOS принудительно только в ландшафтном режиме? - PullRequest
6 голосов
/ 02 июля 2011

Я создал игру для iOS, которая предназначена для ландшафтного режима, и она прекрасно работает, за исключением того, что если вы переключаете устройство в портретный режим, оно останавливается там с интерфейсом, занимающим только среднюю половину экрана.Как я могу заставить приложение разрешить только два режима ландшафта и не останавливаться в портретной позиции.

Я перепробовал все настройки публикации.Соотношение сторон установлено для Пейзаж, и включена автоматическая ориентация, если я сниму флажок Автоматическая ориентация, что приложение не переходит в другой ландшафтный режим, и я слышу, что это автоматический отказ от Apple.

Это приложение готово кпойти за исключением этого маленького недостатка.Спасибо за любую помощь, которую вы можете предложить.

Rich

Ответы [ 3 ]

11 голосов
/ 03 июля 2011

Я нашел ответ на этот вопрос на форумах 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();
   }
}

отлично сработало для меня ..

2 голосов
/ 11 января 2012

Другой, хотя и схожий, способ сделать это - установить aspectRatio в альбомную ориентацию дескриптора приложения, а autoOrients - в false.Затем включите autoOrients, как только приложение загрузится, и прослушайте событие directionChanging.В 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

1 голос
/ 24 мая 2013

Ответ выше не сработал для меня, потому что в iOS предотвращение по умолчанию больше не работает.

Для тех, кому просто все еще не везет ... Вот что я сделал.

Я хотел:

Ipad и все устройства на планшетах Android с возможностью портретной или альбомной ориентации и автоматического поворота в любом направлении

Iphones, Ipods и все устройства с маленьким экраном, которые будут вынуждены использовать альбомную ориентацию (или, может быть, в вашем случае вам нужен принудительный портрет).

Я сделал:

В моем -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 или чего-то еще. Удачи!

РЕДАКТИРОВАНИЕ: Я на самом деле редактирую это, потому что даже у этого метода все еще есть проблемы. Вы получите пейзаж, но он не всегда ориентирован на то, как вы держите устройство ...

EDITED AGAIN (2-27-2014): Оказывается, если я включил -swf-версию 23 (теперь с AIR 4.0), эта проблема наконец-то решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...