Actionscript 3 如何使用按钮控制电影剪辑?
动作脚本新手。 ActionScript3.0 从以下教程开始: 只要代码保留在Flash文件中,一切正常。当我将其移动到外部文件时,我遇到了问题 我的动作层关键帧上有以下代码:Actionscript 3 如何使用按钮控制电影剪辑?,actionscript-3,Actionscript 3,动作脚本新手。 ActionScript3.0 从以下教程开始: 只要代码保留在Flash文件中,一切正常。当我将其移动到外部文件时,我遇到了问题 我的动作层关键帧上有以下代码: stop(); function goHome (e:MouseEvent):void{ gotoAndStop("Home"); } home_btn.addEventListener(MouseEvent.CLICK, goHome); function goAbout (e:MouseEvent):v
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文件中,我遇到了一些问题
我添加了文档类“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文件时,它只是不断循环,而不是暂停按钮点击
任何帮助都将不胜感激。一个类由属性和函数组成:通常是一个构造函数,该构造函数在类实例化后立即运行(在文档类中,该构造函数在应用程序运行后立即运行),然后是以不同方式调用的其他函数 您所做的是将所有函数都放在构造函数中:不好。这就是把一个函数放在一个函数中,你只是不这样做(虽然从技术上讲,你可以做匿名函数,但那是另一回事) 此外,应该在构造函数中添加事件侦听器。添加事件侦听器就是调用一个函数,(据我所知)不能从其他函数之外的类调用函数 基本上,您应该将函数从构造函数中取出,如下所示:
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");
}
}
}
另一件事是文件名应该与类名相同。也就是说,您的文档类应该被称为按钮.as
,而不是site1.as
。我不完全确定它在flashide中是否是100%必需的(我使用它已经有一段时间了),因为它没有给出一个错误,但即使它不是,这也是一个很好的实践
研究类是如何工作的,并具体记录类是一个好主意,和。使用相同的名称命名您的类和文件。我建议使用以下代码
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
访问器
编辑
“button”不是一个很好的类名,但它会起作用
1) 将文件、类和构造函数命名为“button”:
public class button extends MovieClip
public function button()
2) 确保你的链接是好的!意思:如果您想用这个类控制整个电影,请更改按钮
的文档“class”名称,如果您只想控制库中的一个电影剪辑,请将其拖到舞台上,选中“导出动作脚本”,并更改按钮
的“class”值
认为使用此方法,您不需要任何实例名称。在这种情况下,类链接就足够了
参考:
我刚刚纠正了我的代码,因为我忘了将事件侦听器添加到构造函数中。然而,Eric的回答有一点是关于使用
private
/public
访问器指定函数的范围的:虽然它们本质上不是,但通常最好是为了清晰而指定它们,如果没有其他的话。这给了我以下错误“TypeError:Error#1009:无法访问空对象引用的属性或方法。at button()”请参阅我的编辑。我想你的问题更多的是关于“如何与AS3进行文档链接或类链接?”如果我确实理解了问题。除了注意给出的答案外,还可以尝试添加stop();
作为时间轴第1帧(或任何需要停止的帧)上的操作。这将停止电影在所有帧中播放和循环,但可以通过单击按钮转到帧标签