Actionscript 3 从AdobeFlash到FlashDevelop
我正在开发一个需要与AIR应用程序通信的网站,我使用javascript开发,对actionscript不太了解。我正处于这方面的早期阶段,我正在使用Adobe Flash的试用版创建一些可以与javascript进行通信的swf文件,操作窗口中的代码如下,其中大部分来自web示例:Actionscript 3 从AdobeFlash到FlashDevelop,actionscript-3,flash,flashdevelop,Actionscript 3,Flash,Flashdevelop,我正在开发一个需要与AIR应用程序通信的网站,我使用javascript开发,对actionscript不太了解。我正处于这方面的早期阶段,我正在使用Adobe Flash的试用版创建一些可以与javascript进行通信的swf文件,操作窗口中的代码如下,其中大部分来自web示例: import flash.external.ExternalInterface; var myText:String = "Example String"; ExternalInterface.addCallb
import flash.external.ExternalInterface;
var myText:String = "Example String";
ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3);
function sendStaticTextFromAS3():void {
ExternalInterface.call("receiveTextFromAS3", myText);
}
所有这些都是从javascript接收一个调用,并发送回一个字符串,然后调用处理该字符串的函数,这将变得更加复杂
我的问题是Flash很快就要过期了,为了在不必花很多钱在Flash上的情况下证明该项目的可行性,我想进入FlashDevelop。由于我在舞台上不需要任何对象,所以我只需要编辑actionscript,所以FlashDevelop就是我所需要的。我在FlashDevelop中创建了一个新的AS3项目,并获得以下代码:
package
{
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author Will Thomas
*/
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);
// entry point
}
}
}
我猜Adobe Flash在编译swf时会自动添加这一点,所以除了添加import Flash.external.ExternalInterface外,我不知道我的代码应该放在哪里;在顶端
任何帮助都将不胜感激,希望这是一个简单的复制和粘贴的事情
谢谢大家。您看到的是一个顶级类文档,在本例中是一个.as文件,描述了一个名为Main的类,它扩展了Sprite所有顶级文档,这些文档将被编译成.swfs extend Sprite或MovieClip 你是对的,Flash Professional基本上对你隐瞒了这一点,尽管如果你仔细研究,你可以找到document类。但是Flash Professional确实是一个用于绘图/动画制作的创造性工具。虽然可以使用它来编写ActionScript代码,但这并不一定是它的优势所在 是一个免费的IDE,不幸的是Windows只能与Adobe竞争。这些面向actionscript软件开发。这些IDE对于初学者来说非常方便,因为它们将自动下载和安装任何必要的SDK,自动化构建过程,提供项目模板、代码完成和调试,所有这些都在IDE中 如果你更喜欢IDE来帮助你入门,那么它们中的任何一个都可以很好地工作。不过,FlashBuilder是一个商业工具,我相信FlashDevelop是免费的 但是,请注意,您不需要IDE,可以使用完全免费的Adobe工具来编译.as源代码文件到.swf文件-使用。它是一个在Windows、Mac和Linux中工作的命令行编译器,因此您将使用您选择的文本编辑器来编辑.as文件。如果这是您的首选工作流,请参阅以开始 我还建议大家开始使用flash游戏开发——它充满了大量的信息和教程链接 至于你的问题,你的代码在哪里,是的,导入和其他的放在顶部,你的addCallback语句放在入口点注释下,函数变成了主类上的函数,就像init函数一样——在一个类中,它需要一个范围声明,比如public、protected或private。放置myText变量的位置取决于您想要更改它的时间,但现在应该这样做:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.external.ExternalInterface;
/**
* ...
* @author Will Thomas
*/
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);
// entry point
ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3);
}
protected function sendStaticTextFromAS3():void {
var myText:String = "Example String";
ExternalInterface.call("receiveTextFromAS3", myText);
}
}
}
如果我还记得ExternalInterface.addCallback是如何工作的,它看起来会做的是,当您从javascript调用sendOutput时,它会调用ActionScript中的sendStaticTextFromAS3方法,这会将示例字符串发送回receiveTextFromAS3 javascript函数,这有点像一个环回。您可以使用一个函数处理javascript到as3的通信,而另一个函数处理as3到javascript的通信:
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
// Setup js-to-as listener
ExternalInterface.addCallback("sendTextToAS3", receiveTextFromJS);
// Send example text to js
sendTextFromAS3("Hello from ActionScript!");
}
protected function receiveTextFromJS(text:String):void {
trace("Received text from js: "+text);
// TODO: do something with it
}
protected function sendTextFromAS3(text:String):void {
ExternalInterface.call("receiveTextFromAS3", text);
}
您还应该注意,使用addCallback有一些安全限制,如中所述。您的SWF必须嵌入到设置了allowScriptAccess参数的网页上
希望这有帮助= 您看到的是一个顶级类文档—在本例中是一个.as文件,描述了一个名为Main的类,该类扩展了Sprite所有顶级文档,这些文档将被编译成.swfs extend Sprite或MovieClip 你是对的,Flash Professional基本上对你隐瞒了这一点,尽管如果你仔细研究,你可以找到document类。但是Flash Professional确实是一个用于绘图/动画制作的创造性工具。虽然可以使用它来编写ActionScript代码,但这并不一定是它的优势所在 是一个免费的IDE,不幸的是Windows只能与Adobe竞争。这些面向actionscript软件开发。这些IDE对于初学者来说非常方便,因为它们将自动下载和安装任何必要的SDK,自动化构建过程,提供项目模板、代码完成和调试,所有这些都在IDE中 如果你更喜欢IDE来帮助你入门,那么它们中的任何一个都可以很好地工作。不过,FlashBuilder是一个商业工具,我相信FlashDevelop是免费的 但是,请注意,您没有 需要一个IDE,可以使用完全免费的Adobe工具将.as源代码文件编译成.swf文件-使用。它是一个在Windows、Mac和Linux中工作的命令行编译器,因此您将使用您选择的文本编辑器来编辑.as文件。如果这是您的首选工作流,请参阅以开始 我还建议大家开始使用flash游戏开发——它充满了大量的信息和教程链接 至于你的问题,你的代码在哪里,是的,导入和其他的放在顶部,你的addCallback语句放在入口点注释下,函数变成了主类上的函数,就像init函数一样——在一个类中,它需要一个范围声明,比如public、protected或private。放置myText变量的位置取决于您想要更改它的时间,但现在应该这样做:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.external.ExternalInterface;
/**
* ...
* @author Will Thomas
*/
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);
// entry point
ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3);
}
protected function sendStaticTextFromAS3():void {
var myText:String = "Example String";
ExternalInterface.call("receiveTextFromAS3", myText);
}
}
}
如果我还记得ExternalInterface.addCallback是如何工作的,它看起来会做的是,当您从javascript调用sendOutput时,它会调用ActionScript中的sendStaticTextFromAS3方法,这会将示例字符串发送回receiveTextFromAS3 javascript函数,这有点像一个环回。您可以使用一个函数处理javascript到as3的通信,而另一个函数处理as3到javascript的通信:
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
// Setup js-to-as listener
ExternalInterface.addCallback("sendTextToAS3", receiveTextFromJS);
// Send example text to js
sendTextFromAS3("Hello from ActionScript!");
}
protected function receiveTextFromJS(text:String):void {
trace("Received text from js: "+text);
// TODO: do something with it
}
protected function sendTextFromAS3(text:String):void {
ExternalInterface.call("receiveTextFromAS3", text);
}
您还应该注意,使用addCallback有一些安全限制,如中所述。您的SWF必须嵌入到设置了allowScriptAccess参数的网页上
希望这有帮助=