我希望能够写一个.swf文件是可运行的命令行应用程序。 换句话说,我将能够创建可与stdin和stdout交互的ActionScript类,并可能然后直接在命令行中执行该瑞士法郎。
我怀疑这是不是真的有可能。 任何人都可以证实?
编辑:一对夫妇的答案指出,使用Flash命令行的工作可能不是最好的选择。 我完全同意在大多数情况下。 我问这个的原因是因为我想要做一些AS3代码生成,并反映在运行时内AS3类会比解析代码或者是行走产生的asdoc中介XML更容易。 我现在做的XML方法在Ruby中,但很想有一个清洁的解决方案!
没了 - 不可能。 你能做的最好的是一个独立的应用程序(可以在Flash或Flash播放器的投影机版本进行,可从Adobe网站)。
为什么你会想 - Flash是因为伟大的GUI功能真棒。 有很多是在命令行更适合(Python或Ruby或上帝保佑,即使是Perl)其他编程语言
是! 它实际上是可能的。
您可以创建一个纯粹的AS3 AIR项目(不加任何应用程序窗口),并使用ADL(AIR调试启动器)在命令行中运行。
ADL将执行您的SWF并会把你给任何参数,直接到你的应用程序在运行时,所有的命令行! 要阅读从AS3只是将此代码添加到您的主类的参数:
package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.InvokeEvent;
public class CmdLine extends Sprite
{
public function CmdLine()
{
NativeApplication.nativeApplication.addEventListener(
InvokeEvent.INVOKE, onInvokeEvent);
function onInvokeEvent(invocation:InvokeEvent):void {
trace(invocation.arguments);
}
}
}
}
你的主类仍然会延长Sprite
,但你不会看到任何UI,除非你创建NativeWindow
对象。 如果你正在使用Flash Builder,只需创建一个新的AIR项目和主要的扩展名重命名.mxml
文件.as
(完成向导之前)。
这里更多的是ADL: 使用AIR调试启动器(ADL)
此外,这将是非常有用的: AIR应用程序的调用和终止
你可以把你所有的使用输出trace()
写文件,甚至直接写入stdout,所看到这里 。
显然存在的Tamarin项目,该项目旨在建立AS3的开源实现。 此页面提供了一个编译脚本AS3从一个命令行运行它的一个小细节。
我没有得到的狨猴是如何稳定是一个好主意,但它可能是你最好的选择现在。 在另一方面,我有@zenazn,你会过得更好的长期学习更适用于一般目的的语言非常同意,但如果真的想只使用ActionScript,不要让任何人阻止你:)
有没有办法用裸SWF做到这一点现在。
但是,你可以发布您的Flash内容的AIR应用程序。 该应用程序然后可以从命令行调用,您可以从收集的论点论据的财产的InvokeEvent 。 其基本思路是这样的:
NativeApplication.nativeApplication.addEventListener(
InvokeEvent.INVOKE, onInvoke );
// ...
function onInvoke( e:InvokeEvent ) {
var numArguments:int = e.arguments.length;
// ...
}
但是请注意,这基本上是一个单行道。 你可以抓住的命令行参数,但是Flash仍然没有神交stdin和stdout的想法。
其实,有一个项目,使其成为可能。 RedTamarin是扩展AS3项目(从技术上说,该项目的Tamarin这是Adobe / Mozilla浏览器的ECMAScript项目)有机会获得低级别的库(即POSIX)。 在目前的状态时,它似乎是好喜欢这正是它听起来就像你在找什么shell脚本,程序等的东西。
试试看:
http://code.google.com/p/redtamarin/
您可以使用标准输入,标准输出互动和redtamarin标准错误
http://code.google.com/p/redtamarin/
见例子/文档这里
http://code.google.com/p/redtamarin/wiki/System#stdout
http://code.google.com/p/redtamarin/wiki/System#stderr
http://code.google.com/p/redtamarin/wiki/System#stdin
有Flash和ActionScript 3的Flash之间的差值运行时,AS3是一种语言
我不明白为什么AS3不会是一个很好的编程语言中的命令行和/或服务器端
现在,redtamarin就是这样,运行时,使您可以在命令行中运行你的AS3源代码。
此外,根据您的需要,你可以以不同的方式使用它
在命令行上运行脚本
$ ./redshell myscript.as
在命令行中运行ABC或SWF文件
$ ./redshell myscript.abc
$ ./redshell myscript.swf
运行exectuable
$ ./myscript
当你运行一个脚本AS3将动态解释,采用ASC你将能够编译相同的脚本,到也可以从命令行运行ABC文件。
例如,如果你需要装配无数ABC文件一起,你可以使用swfmake将它们合并为SWF文件运行时将在命令行中运行的SWF文件了。
最后,如果你需要在一个可执行捆绑一切,你可以使用createprojector把你的ABC或SWF文件,并与运行时本身进行合并,以获得一个独立的可执行文件。
Redtamarin提供原生API覆盖文件系统访问,插座,操作系统信息等。
如果你是真的那么斜,你可以打开一个本地套接字,然后有一个辅助程序,在命令行与开放的SWF通讯运行。
这可能是学习另一种语言的好时机。 我建议的Java?
我最近有一个类似的问题。 我花了几天来回答自己,但你可以创建一个.swf文件和完全从命令行执行它。
AS3文件系统的Hello World
你可以看看HAXE有非常相似,AS3,并可能编译NekoVM字节码,它可以在命令行中运行。
同样有趣的可能是HippoHX ,它是一种框架创建桌面应用了Flash动画的。 (类似空气,但具有完全访问系统。)