如何使用按钮控制动画片段?

时间:2013-04-18 11:03:17

标签: actionscript-3

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文件时,它只是保持循环而不是暂停按钮点击。

非常感谢任何帮助。

2 个答案:

答案 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 classeshere'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

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b8ea63-7fee.html