wil*_*900 1 flash flashdevelop actionscript-3
我正在开发一个需要与AIR应用程序通信的网站,我使用javascript开发并且对actionscript不太了解.我正处于这个阶段的早期阶段,我正在使用Adobe Flash的试用版来创建一些可以与javascript通信的swf文件,Action窗口中的代码如下(大部分内容来自web示例):
import flash.external.ExternalInterface;
var myText:String = "Example String";
ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3);
function sendStaticTextFromAS3():void {
ExternalInterface.call("receiveTextFromAS3", myText);
}
Run Code Online (Sandbox Code Playgroud)
所有这一切都是从javascript接收调用并发回一个字符串并调用将处理它的函数(它将变得更复杂).
我的问题是Flash即将到期,并且为了将来证明该项目而不必花费大量精力于flash我想进入FlashDevelop.因为我不需要舞台上的任何对象,所以我需要的是编辑动作脚本,因此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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我猜测Adobe Flash在编译swf时自动添加这个,所以我不知道我的代码应该去哪里,除了添加导入flash.external.ExternalInterface; 在顶部?
任何帮助将不胜感激,希望它是一个简单的复制和粘贴的东西.
谢谢大家.
您正在查看的是顶级类文档 - 在本例中是一个.as文件,该文件描述了一个名为Main的类,它扩展了Sprite(将编译为.swfs的所有顶级文档扩展Sprite或MovieClip).
你是对的,Flash Professional基本上会隐藏这一点(尽管你可以到达文档类).但Flash Professional确实是一种创作工具(用于绘图/动画).虽然可以使用它来编写ActionScript代码,但这不一定是它的优势.
FlashDevelop是一个免费的IDE(不幸的是仅适用于Windows)与Adobe的Flash Builder竞争.这些都是针对动作脚本软件开发的.这些IDE对于初学者来说非常方便,因为他们将自动下载并安装任何必要的SDK,自动化构建过程,提供项目模板,代码完成和调试,所有这些都在IDE中.
如果您更喜欢IDE来帮助您入门,那么其中任何一个都应该可以正常工作(尽管Flash Builder是一个商业工具,我相信Flash Develop是免费的).
但是,请注意您不需要IDE并且可以使用完全免费的Adobe工具将.as源代码文件编译为.swf文件 - 使用Adobe Flex SDK.它是一个在Windows,Mac和Linux中运行的命令行编译器,因此您将使用您选择的文本编辑器来编辑.as文件.如果这是您首选的工作流程,请参阅本教程以开始使用.
我还推荐这篇关于Flash游戏开发入门的优秀文章 - 它充满了很棒的信息和教程链接.
至于你的代码去哪里的问题,是的,导入与其他代码一起排在最前面,你的addCallback语句在"入口点"注释下,函数成为Main类的一个函数(就像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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我还记得ExternalInterface.addCallback是如何工作的,看起来它会做什么,当你从javascript调用sendOutput()时,它将在ActionScript中调用sendStaticTextFromAS3方法,该方法将"示例字符串"发送回receiveTextFromAS3( )JavaScript函数 - 一种环回.你可能只有一个函数来处理你的javascript-to-as3通信,而一个单独的函数处理你的as3-to-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);
}
Run Code Online (Sandbox Code Playgroud)
您还应注意,使用ExternalInterface文档中描述的addCallback存在安全限制(您的SWF必须嵌入到设置了allowScriptAccess参数的网页上).
希望这可以帮助.=)
归档时间: |
|
查看次数: |
2459 次 |
最近记录: |