2010-10-14 3 views
2

Я опытный разработчик AS3, который впервые разрабатывает AIR, чтобы создать приложение для iPhone. Я пытаюсь учитывать переменные ориентации устройств, используя StageOrientationEvent и связанные классы, и я получаю VerifyError при попытке протестировать на настольной машине, предположительно потому, что связанные с ориентацией классы являются специфическими для мобильных устройств.Как избежать проверки VerifyError при тестировании кода с использованием классов мобильных устройств в AIR/AS3?

Документы Adobe для iPhone-упаковщика подразумевают, что можно протестировать приложение, содержащее код, специфичный для мобильных устройств, до тех пор, пока вы используете флаги, такие как Stage.supportsOrientationChange, чтобы проверить возможности до их фактического использования. К сожалению, кажется, что AIR проверяет неприемлемые классы при запуске, поэтому проверка бесполезна.

Как я могу протестировать это приложение на рабочем столе, не комментируя код для мобильных устройств при каждом переключении устройств?

Соответствующий код:

package 
{ 
import flash.display.Sprite; 
import flash.display.Stage; 
import flash.display.StageAlign; 
import flash.display.StageOrientation; 
import flash.display.StageScaleMode; 
import flash.events.Event; 
import flash.events.StageOrientationEvent; 

public class Main extends Sprite 
{ 
    public function Main():void 
    { 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 

     if (Stage.supportsOrientationChange) 
     { 
      stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange); 
     } 
    } 

    private function onOrientationChange(event:StageOrientationEvent):void 
    { 
     switch (event.afterOrientation) 
     { 
      case StageOrientation.DEFAULT: //ignore. Landscape. 
       break; 
      case StageOrientation.ROTATED_RIGHT: 
        stage.setOrientation(StageOrientation.ROTATED_RIGHT); 
       break; 
      case StageOrientation.ROTATED_LEFT: 
       stage.setOrientation(StageOrientation.ROTATED_LEFT); 
       break; 
      case StageOrientation.UPSIDE_DOWN: //ignore. Landscape. 
       break; 
     } 
    } 
} 

} 

И Я получаю ошибку:

[Fault] exception, information=VerifyError: Error #1014: Class flash.events::StageOrientationEvent could not be found. 

ответ

0

Убрать или комментарий все, что вам не нужно или не полностью поддерживается для того, чтобы проверить внутри рабочего стола. Другое дело, что вы делаете, это попробовать другое обходное решение, помимо StageOrientation. Существует хороший пример использования ускорителя и высоты и высоты сцены для получения ориентации устройства.

1

Лучший способом я нашел, чтобы справиться с этим обертыванием кода, если заявление, как например:

if(ApplicationDomain.currentDomain.hasDefinition("flash.events.StageOrientationEvent")){ 
    if(Stage.supportsOrientationChange) 
    stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orientationChange); 
} 

Затем добавляя обобщенную функцию событий и литье в результате события класса StageOrientationEvent:

private function orientationChange(event : Event):void{ 
    switch ((event as StageOrientationEvent).afterOrientation) { 
     case StageOrientation.DEFAULT: 
      break; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^