2

我是一位经验丰富的 AS3 开发人员,第一次进行 AIR 开发以创建 iPhone 应用程序。我正在尝试使用 StageOrientationEvent 和相关类来解释可变的设备方向,并且在尝试在台式机上进行测试时遇到了 VerifyError,大概是因为与方向相关的类是特定于移动设备的。

iPhone 打包程序的 Adob​​e 文档暗示可以测试包含特定于移动设备的代码的应用程序,只要您在实际使用它们之前使用 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.
4

2 回答 2

1

我发现处理此问题的最佳方法是使用 if 语句包装代码,如下所示:

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;
    }
}
于 2013-06-22T06:32:09.453 回答
0

删除或评论您不需要或不完全支持的所有内容,以便在桌面内部进行测试。您可以做的另一件事是尝试除 StageOrientation 之外的另一种解决方法。有一个使用加速器和舞台宽度和高度来获取设备方向的好例子。

于 2010-11-06T18:53:07.720 回答