Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从AdobeFlash到FlashDevelop_Actionscript 3_Flash_Flashdevelop - Fatal编程技术网

Actionscript 3 从AdobeFlash到FlashDevelop

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

我正在开发一个需要与AIR应用程序通信的网站,我使用javascript开发,对actionscript不太了解。我正处于这方面的早期阶段,我正在使用Adobe Flash的试用版创建一些可以与javascript进行通信的swf文件,操作窗口中的代码如下,其中大部分来自web示例:

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参数的网页上

希望这有帮助=