Actionscript新手。 Actionscript 3.0 按照http://republicofcode.com/tutorials/flash/basicwebsite/上的教程开始 只要代码保留在Flash文件中,一切正常。当我将它移动到外部文件时,我有一个问题。
我的动作图层关键帧上有以下代码:
stop();
function goHome (e:MouseEvent):void{
gotoAndStop("Home");
}
home_btn.addEventListener(MouseEvent.CLICK, goHome);
function goAbout (e:MouseEvent):void{
gotoAndStop("About");
}
about_btn.addEventListener(MouseEvent.CLICK, goAbout);
function goLinks (e:MouseEvent):void{
gotoAndStop("Links");
}
links_btn.addEventListener(MouseEvent.CLICK, goLinks);
function goContact (e:MouseEvent):void{
gotoAndStop("Contact");
}
contact_btn.addEventListener(MouseEvent.CLICK, goContact);
一切正常但我想将代码移动到外部as3文件并遇到问题。
我添加了Document类“site1”,这是我的外部文件的名称。我从我的flash文件关键帧中删除了代码并将其移动到外部文件。
以下是我的site1.as
中显示的代码 package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
public class button extends MovieClip{
public function button() {
function goHome (e:MouseEvent):void{
gotoAndStop("Home");
}
home_btn.addEventListener(MouseEvent.CLICK, goHome);
function goAbout (e:MouseEvent):void{
gotoAndStop("About");
}
about_btn.addEventListener(MouseEvent.CLICK, goAbout);
function goLinks (e:MouseEvent):void{
gotoAndStop("Links");
}
links_btn.addEventListener(MouseEvent.CLICK, goLinks);
function goContact (e:MouseEvent):void{
gotoAndStop("Contact");
}
contact_btn.addEventListener(MouseEvent.CLICK, goContact);
}
}
}
问题是,当我发布我的Flash文件时,它只是保持循环而不是暂停按钮点击。
非常感谢任何帮助。
答案 0 :(得分:1)
一个类由属性和函数组成:通常是一个构造函数,它在实例化类时运行(文档类在应用程序运行时立即运行),然后是以不同方式调用的其他函数
您所做的就是将所有函数放在构造函数中:不好。这是一个功能,你只是不这样做(虽然从技术上讲,你可以做匿名功能,但这是一个不同的故事)。
此外,您的事件侦听器应该在构造函数中添加。添加事件监听器是调用一个函数,并且(据我所知)你不能从其他函数之外的类调用函数。
基本上,你应该把你的函数从构造函数中取出来,如下所示:
package{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
public class button extends MovieClip{
public function button() {
home_btn.addEventListener(MouseEvent.CLICK, goHome);
about_btn.addEventListener(MouseEvent.CLICK, goAbout);
links_btn.addEventListener(MouseEvent.CLICK, goLinks);
contact_btn.addEventListener(MouseEvent.CLICK, goContact);
}
function goHome (e:MouseEvent):void{
gotoAndStop("Home");
}
function goAbout (e:MouseEvent):void{
gotoAndStop("About");
}
function goLinks (e:MouseEvent):void{
gotoAndStop("Links");
}
function goContact (e:MouseEvent):void{
gotoAndStop("Contact");
}
}
}
另一件事是文件名应该与类名相同。也就是说,您的文档类应该被称为button.as
而不是site1.as
。我不完全确定它是否在Flash IDE中是100%必需的(自从我使用它以来已经有一段时间了)因为它没有给出错误,但即使它不是它的好习惯。
研究类如何工作以及具体记录类是一个好主意。 Here's a kirupa tutorial on classes和here's an ActiveTuts+ tutorial on document classes。
答案 1 :(得分:1)
使用相同的名称命名您的类和文件。我建议使用以下代码。
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField;
public class YourClassName extends MovieClip
{
public function YourClassName() {
home_btn.addEventListener(MouseEvent.CLICK, goHome);
about_btn.addEventListener(MouseEvent.CLICK, goAbout);
links_btn.addEventListener(MouseEvent.CLICK, goLinks);
contact_btn.addEventListener(MouseEvent.CLICK, goContact);
}
private function goHome(e:MouseEvent):void {
gotoAndStop("Home");
}
private function goAbout(e:MouseEvent):void {
gotoAndStop("About");
}
private function goLinks(e:MouseEvent):void {
gotoAndStop("Links");
}
private function goContact(e:MouseEvent):void {
gotoAndStop("Contact");
}
}
}
AS3比AS2更明确。我建议您使用private
/ public
访问者。
EDIT。
'button'不是一个非常好的类名,但它会起作用。
1)命名你的文件,类和构造函数:'button':
public class button extends MovieClip
public function button()
2)确保您的联系良好!含义:如果您想使用此类控制整个电影,请更改button
的文档“类”名称,如果您只想从库中控制一个MovieClip,请将其拖到舞台上,选中“导出为”动作脚本“,并更改button
的”类“值。
认为使用此方法,您不需要任何实例名称。在这种情况下,类链接就足够了。
参考:
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Class.html