1

我正在制作一个需要针对 flash/air 并且最好是 html5 的应用程序。这个应用程序具有在文件系统中写入数据的功能。我已经开始使用 Haxe/OpenFL(这是我的第一次体验)。

我知道 flash 和 html5 将无法访问本地用户的文件系统来写入和读取数据。因此,这些版本将通过在云中存储数据来交换此功能。

但是 AIR 总是有可能操作文件系统。所以我现在有两个问题:

  1. 是否可以将 Haxe/OpenFL 项目打包到 AIR 应用程序中,并制作合适的 .air 安装程序?还是我应该使用某种 cpp/c++ 替代品?在这种情况下,最佳做法是什么?
  2. OpenFL/Haxe 的哪个 API 让我可以在文件系统上写入数据?
4

3 回答 3

2

不同的平台有不同的实现来保存/加载用户数据。您应该#if为所有目标平台提供所有可能的选项。
例如:

#if cpp
import haxe.io.Eof;
import sys.FileSystem;
import sys.io.File;
import sys.io.FileOutput;
import sys.io.FileInput;
 #else if flash
import flash.net.SharedObject;
import flash.net.SharedObjectFlushStatus;
import flash.events.NetStatusEvent;
 #end
class FileIO {
   public function SaveData() : Void {
 #if cpp
     var Fout : FileOutput = null;
        try {
            myFout = sys.io.File.write("c:\mypath\myfile.name", false);
            myFout.writeInt32(100);
            [.....]
 #else if flash
     var shObj : SharedObject = null;
     try {
           shObj  = SharedObject.getLocal("mySHODATA");
           var ret : String = shObj.flush(MinFileSize);
           [......]
 #end
  }
}

等等。flash AIR,长话短说只是 - 几乎 - 一个用于桌面执行的 flash 包装器。将其想象为桌面的 swf 容器(而不是在 Web 浏览器中实例化 swf 容器)。所以AIR-wrapped app == flash/swf app。如果您想使用 AIR 实现来访问文件,您可以按照以下步骤进行操作。
如果你使用haxe,它对不同的目标有自己的实现,即“#if”会发现“flash”分支为真,即使你打算AIR-wrap你的flash-app;所以你必须使用共享对象。
我认为针对桌面目标编译 cpp 更明智,而不是稍后使用“flash + wrap around with AIR”。

于 2014-10-22T09:52:36.747 回答
1
  1. 据说可行,但没试过。
  2. 签出sys.FileSystemsys.io
于 2014-10-13T15:33:39.223 回答
1

本指南将引导您完成使用 AIR 发布 iOS 和 Android 的过程http://www.openfl.org/archive/community/installing-openfl/building-air/

于 2014-10-20T15:28:30.123 回答