您可以将许多C++技能应用于您的AS3项目。
有很多技巧。很高兴你提出了在主要时间表上放置代码。我没有在时间轴上放置代码(这在AS2程序中很常见,而在AS3中可以完全避免),所以我建议将每个对象作为一个单独的类来考虑。例如,您正在使用鼠标点击代码的动画片段可以是使用其自己的类创建的对象。说MovieClip是一个球的图形。你应该创建一个扩展(继承)MovieClip类一个“球”级,并在其处理的鼠标点击事件:
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class myObjects.Ball extends MovieClip
{
public function Ball()
{
this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
}
private function mouseDownHandler(event:MouseEvent):void
{
// Code
}
}
}
然后,找到你在图书馆窗格球的影片剪辑,右键单击它,属性,切换到高级模式,勾选导出为AS。现在,请注意您的MovieClip已经将MovieClip类引用为其基类了吗?因为你的Ball类扩展了MovieClip类,所以你不会再需要这个了。所以在Class字段中写入'myObjects.Ball'并清除Base类字段。如果您编写了Flash IDE可以找到的名称空间Ball类的路径,则应该看到一个绿色复选标记。
现在,您的Ball类将使用该MovieClip,因此当您在主类中创建Ball的新实例时,可以使用它作为MovieClip并动态地将其附加到舞台上。或者,您可以通过在该处手动拖动Ball MovieClip将其添加到时间线中。
扩展我解释的类是AS3的'继承'版本(Ball类继承MovieClip类)。你也可以使用其他的OO概念,如polymorphism和封装。尽可能将代码封装到单独的类中。假设您的项目中有几种不同类型的球形动画片段,并且您希望球形课程成为足球,球形球和棒球的父级。每个孩子课程都可以扩展Ball类。我发现对于大型项目有用的另一件事是创建一个静态类来处理我的应用程序的所有事件。因为我将它定义为public static class
,所以我可以将它导入到每个类中,并且只在应用程序的持续时间内为其创建一次变量。这可能非常有用。
我也在类中创建了自己的伪析构函数,以便像使用C++一样使用AS3。最简单的方法是在销毁对象的实例之前调用伪析构函数。我确实是在一个应用程序中自动实现的,所以如果我感兴趣的人可以追踪代码......但AS3处理幕后的垃圾回收,通常不需要析构函数,但也许我只是认为它不是必需的,因为我在AS3编程中养成了很长时间的坏习惯。个人而言,我认为你越努力在AS3中开发应用程序就好像你正在用C++开发一样,获得的乐趣越多,代码的可重用性越高。保持它..很快,而不是一堆代码,你会有一堆动作文件大声笑..一把双刃剑,但whatevs一点点。
+1答案。我认为要记住的主要事情(考虑OP来自C++)是时间线代码可能是非常不可预测的,应该是(极少数例外)不惜一切代价避免。使用as3中的所有面向对象功能,它也是不必要的。 – Bosworth99 2011-06-09 14:53:35
对。我认为,当我第一次进入AS时,我形成了一些不好的习惯......并且因为他们得到了我的结果而陷入了困境。但是,是时候以正确的方式做事了。 – 2011-06-09 15:01:38
绝对。 Flash IDE中的时间线编码是贫民窟,应该用适当的类文件替换。此外,您还应该使用较细的Sprite对象而不是MovieClip对象。 – TheDarkIn1978 2011-06-10 04:52:02