2

看来OpenLaszlo可以在 AIR 上运行。不太明显的是 OpenLaszlo 应用程序是否可以使用特定于 AIR 的 API,例如文件系统访问。如果是这样,这究竟是如何完成的?

4

2 回答 2

2

虽然我没有任何细节,但您链接的文章提到他的应用程序窗口可以拖动和关闭。这些是仅限 AIR 的 API(请参阅 NativeWindow 类),因此您所询问的内容大概在某种程度上是可能的。

然而,我的理解是,OpenLaszlo 试图不实现可以在 Flash 中完成的事情,而不是(比如)DHTML,因此如何执行诸如本地文件访问之类的事情可能不太明显。可能你会想下载文章中链接的源代码,看看他是如何实现窗口拖动/关闭的。

于 2008-11-06T02:16:42.897 回答
1

OpenLaszlo 确实实现了仅在某些运行时可用的功能。这对于 MP3 音频播放、Flash Player 网络摄像头和麦克风访问、RTMP 流媒体来说都是如此。OpenLaszlo 编译器支持将 ActionScript 代码直接插入到脚本和方法中。

这是一个示例应用程序,它捕获 Event.DEACTIVATE 和 Event.ACTIVATE 事件,并允许您通过单击/触摸红色视图退出应用程序。

ActionScript 3 API 可以使用 <passthrough> 标记导入 - 可以在画布、类定义或代码中的任何标记实例中使用。

<canvas bgcolor="#ffffff" debug="false" height="100%" width="100%">

    <passthrough when="$as3">
        import flash.events.Event;
        import flash.desktop.NativeApplication;
    </passthrough>

    <handler name="oninit">
        NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, __onDeactivate);
        NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, __onActivate);
    </handler>

    <method  name="__onActivate" args="ev">
        Debug.info("onActivate");
        Debug.info("frame rate is " + this.getDisplayObject().stage.frameRate)
    </method>

    <method  name="__onDeactivate" args="ev">
        Debug.info("onDeactivate");
        Debug.info("frame rate is " + this.getDisplayObject().stage.frameRate)
    </method>

    <view width="80%" height="50%" bgcolor="red" clickable="true">
        <passthrough>
            import flash.desktop.NativeApplication;
        </passthrough>
        <handler name="onclick">
            NativeApplication.nativeApplication.exit();
        </handler>
    </view>

</canvas>

如果您只想为 SWFx 运行时执行代码,您可以检查将该代码放入块中,检查 $as3 属性:

if ($as3) {
  // Insert some code for the SWFx runtime or AIR applications only
}

使用该方法,可以轻松地将 LZX 代码重用于 DHTML、SWFx 或 AIR 应用程序。

于 2010-08-04T10:42:08.593 回答