我最近计划将现有的基于Flash Player的游戏移植到桌面应用程序,以便在Steam平台上发布。 Adobe AIR框架似乎是分发的合理选择,特别是考虑到AIR 3中的最新更新。鉴于我对flash / flex开发相对较新,我已阅读了大量关于Adobe的AIR文档。网站,以便更好地了解任务涉及的内容。总的来说,我认为我对需要发生的事情有一个不错的想法,但是有一些皱纹可能影响是否/如何甚至可以移植到AIR框架:
我的首要任务是找出将外部游戏客户端SWF加载到AIR应用程序的最佳方法。最初,我尝试使用Loader.load(),但这导致了以下异常:
SecurityError: Error #2070: Security sandbox violation: caller http://localhost/MyClient.swf cannot access Stage owned by app:/AS3_AIRTest.swf.
at flash.media::SoundMixer$/set soundTransform()
at com.company.client.sound::SFXManager$/load()
at global/client.util::loadEmbeddedSounds()
at MyClient()
违规代码是:
static public function load():void {
SoundMixer.soundTransform =
new SoundTransform(Client.Settings.PlaySFX ? 1 : 0);
}
在遇到此异常后,我决定在AIR / Flash播放器安全域上阅读更多内容。我对异常发生的原因有了更清楚的理解,但我仍然不确定加载SWF的最佳方法是什么,并且不会收到上述异常。
在浏览各种论坛上的众多帖子后,我发现许多开发人员使用Loader.loadBytes()将SWF带入应用程序沙箱。从易于实施的角度来看,我可以看到为什么许多人选择走这条路线;但是,由于在外部服务器受到威胁的情况下对用户系统的潜在危险,我不倾向于采用这种方法。
我读到的第二种方法是我可以使用沙箱脚本桥,并编写一个接口以向外部客户端SWF授予某些特权。我现在对这条路线犹豫不决,因为游戏客户端相当复杂,而且我不完全确定通过不同的Flash API对舞台需要多少访问权限。我没有写过这种方法,因为它听起来可能是最好的选择,但它可能是一项巨大的努力,我希望对客户SWF产生最小的影响。
我读到的最后一种方法是制作HTML AIR应用程序。我的理解(最好是粗略的)是通过HTML加载的SWF(我相信框架/ iframe)将有自己的阶段。我的想法是,如果HTML应用程序加载主页面,而主页面又有一个嵌入了游戏客户端的SWF的iframe,那么客户端SWF将加载到远程安全沙箱中并可以访问自己的阶段。我希望SWF的行为与Flash Player中的行为一样。
这引出了以下问题:
目前非常感谢任何帮助。似乎有很多选择,但我不确定在这个时间点追求哪条路是正确的。
再次感谢。
约什
答案 0 :(得分:0)
你已经调查了很多。我要提到Loader.loadBytes技术,但你提到它不安全。实际上,如果您知道可以下载的SWF的签名哈希值,您可以处理安全问题。我记得在AIR团队经理的博客中已经阅读过这种方法,但我现在无法回忆起这个链接。基本上,如果您事先知道可以下载的所有SWF,然后生成其签名哈希并将这些哈希值放在随初始AIR应用程序一起提供的XML中,则该方法将起作用。然后,初始AIR应用程序可以下载这些SWF,比较它们的签名并在应用程序沙箱中加载它们(如果它与运送的哈希值匹配等)。
答案 1 :(得分:0)
(有很多要点的长问题,但这里有)
我要看的另一件事,如果你还没有,那么Steam提供的设施是进行此类更新。上传新项目/更新到Steam的周转时间是否真的大于将此安装后更新系统添加到应用程序本身所需的时间? (我希望你不是在Dilbertian的一种情况下,在纸面上看起来你可以通过做奇怪的事情来节省时间。根据我的经验,通过在Microsoft Project(或类似)中拖动滑块创建的奇迹不是'平移。)