0

动作脚本新手。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 文件并遇到问题。

我添加了文档类“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 文件时,它只是保持循环而不是暂停按钮单击。

任何帮助都将不胜感激。

4

2 回答 2

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% 必要的(自从我使用它以来已经有一段时间了),因为它没有给出错误,但即使它不是一个好习惯。

研究类是如何工作的,并专门记录类是一个好主意。这是关于类的 kirupa 教程这是关于文档类的 ActiveTuts+ 教程

于 2013-04-18T14:21:54.450 回答
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访问器。

编辑。

'button' 不是一个很好的类名,但它会起作用。

1)命名你的文件,类和构造函数:'button':

public class button extends MovieClip

public function button()

2)确保您的链接良好!含义:如果你想用这个类控制你的整个电影,改变文档“类”的名字button,如果你只想控制你库中的一个电影剪辑,把它拖到你的舞台上,选中“导出动作脚本”,然后更改您的“类”值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

于 2013-04-18T14:34:29.743 回答