为什么在AS3中使用类更好

时间:2010-02-03 19:15:34

标签: flash actionscript

我不喜欢外部文件。大多数开发人员更喜欢这个并声称它更好。解释为什么在ActionScript 3.0中使用类更好。

我的ActionScripts是不同的。我将类剥离并将其粘贴到Flash IDE中。 10次​​中的9次工作正常。我的问题是苏格拉底式,但我真的对此感到无知,因为我正在努力做的事情的代码较少。玩得开心。

这是我解剖的教程 - “示例测试键盘输出”

//AFTER
//remove curly brackets and "outer shell of class definitions"
//remove class function "don't need it"
//function at bottom, remove "public", make sure it has a body {}
var _time_scale:Number = .25; 
var _frames_elapsed:int = 0; 
var _clip:MovieClip; 

function handleEnterFrame(e:Event):void { 
_frames_elapsed++; 
_clip.gotoAndStop(Math.round(_clip.totalFrames * _frames_elapsed * _time_scale)); 
}

//BEFORE
package { 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class Main extends Sprite { 

        private var _time_scale:Number = .25; 
        private var _frames_elapsed:int = 0; 
        private var _clip:MovieClip; 

        public function Main():void { 
            _clip = new SomeClip; 
            addEventListener(Event.ENTER_FRAME, handleEnterFrame); 
        } 

        private function handleEnterFrame(e:Event):void { 
            _frames_elapsed++; 
            // we multiply the "real" time with our timescale to get the scaled time 
            // we also need to make sure we give an integer as a parameter, so we use Math.round() to round the value off 
            _clip.gotoAndStop(Math.round(_clip.totalFrames * _frames_elapsed * _time_scale)); 
        } 

    } 
}

可能没有答案,但必须有一个有意义的明确解释。

5 个答案:

答案 0 :(得分:1)

这听起来像是两个问题:

1)为什么将代码放在Flash IDE(CS4)中是不好的? 首先,flash IDE中的编辑器在历史上非常糟糕。它只是没有我期望从代码编辑器中获得的功能。

其次,很难找到时间轴中的代码。

第三,当您对ide进行更改并将其检入您的代码存储库(您确实使用版本控制,对吗?)时,更改是二进制的,无法轻松跟踪和区分。

2)为什么面向对象好? 面向对象是关于封装。这不是唯一的做事方式,但目前,它是最受欢迎的方式。这是一个很好的解释它的页面: http://www.alagad.com/blog/post.cfm/what-does-object-oriented-programming-do-for-me

答案 1 :(得分:1)

我不会说使用课程一定更好。我会说最好遵循某种类型的结构和/或范例,特别是在编写不能复制和粘贴的大型程序时。 Actionscript为您提供了许多如何构建的选项。您可以坚持使用原型/无类型范例,仅使用程序等代码。

然而,当你通过小型程序时,结构将易于维护。

答案 2 :(得分:0)

这是一个很好的讨论问题。 1

史蒂夫提出了一些很好的观点,特别是关注SOMETHING。 CamelCase变量名是否比under_score变量名更好?没有真正的偏好,但如果你混合搭配,就会更难跟进。使用名为varA的变量看起来更清晰,并且使得源代码文件比thisVariableThatShallDescribeTheLetterA更小,但是一旦你的应用程序开始增长,描述性越强的名称越来越有用。

它可能会增加您的应用或源代码的大小,但维护和跟进的能力会产生巨大的差异。我们正在开发的应用程序现在开始很小,因此类似乎并不重要,并且由于范围蔓延的骗子之神这个应用程序现在是巨大的。现在我们正试图将我们的AS分成几类,以便我们可以找到它们,而不是仅仅依靠我们的程序员知道事物的位置。

答案 3 :(得分:0)

  • 类促进逻辑上将代码拆分为可重用对象。
  • 反过来,这有助于使您的程序面向对象。 C#,Java,Objective-C,AS3是面向对象的语言是有充分理由的。
  • OO构建的系统通常可以很好地扩展,基于现实对象的抽象数据(类型),从而使它们更容易可视化,可重用,并且通过封装信息更安全。
  • 正如其他人所提到的,外部类可以使用更好的IDE进行编辑,并且可以进行版本控制。

更不用说时间线代码的所有陷阱了。我在时间线上编码的唯一一次是我正在做一个快速实验或测试一个类。通常最多40行代码

答案 4 :(得分:0)

答案是“这取决于”。我知道这很蹩脚,但这是真的。

如果您有超过50行代码(至少是一个文档类),我个人的理念是使用类。

1)使用类将为您提供Object Oriented Programming的所有优点。在这里,我将重点介绍其中一些:

  • 可伸缩性:如果您选择并创建不同的实例,则可以重用您的类。出于同样的原因,您可以将该课程放入另一个Flash项目中,它将立即起作用。
  • 可扩展/继承:如果必须使用相同的类,但需要对其进行非常小的修改,则可以创建子类或子类来继承,然后覆盖需要进行修改的部分。

2)如前面的反馈所述,Flash并不打算用于编码。虽然多年来它已被大幅修改以适应编码,但它仍然缺乏良好的编码接口。

3)如果您的Flash项目中的代码隐藏在图层中,则可能很难找到它们。分离代码和时间线动画可以提高项目的可维护性。

在你的例子中,我认为将它放在你的flash fla文件中是完全没问题的,如果你只使用它一次,你永远不会再改变它。

但假设,假设您需要使用相同的代码在相同的项目中创建更多Flash项目(FLA)或Movie Clips。当然,您最初可以将它们复制并粘贴到新的FLA文件或影片剪辑中,没有任何问题。但是当/如果你想改变所有项目的_time_scale时,你必须转到代码所在的框架并为每个FLA更改它。想象一下,如果您的代码中有10个更改。如果你使用一个类并将它放在一个公共区域,你需要做的就是更改一次类代码并重新编译所有FLA文件。

根据我的经验,90%的时间您希望您的代码在课堂上。另外10%是你有一些非常直接和简单的事情,代码只有几行 - 比如navigateToURL(getURL)方法......等等。