AS3,基本的OOP,我想?

时间:2012-11-21 00:15:55

标签: actionscript-3 oop

好的我对我猜的基本OOP有一些疑问。例如,假设我有很多不同的对象,它们有不同的类。比方说,一个名为car(Car.as)的对象,然后我有一辆卡车(truck.as)和一辆轻便摩托车(轻便摩托车.as)。现在不是在所有这些中编写一个简单的函数,我不能有一个类然后将这个函数附加到这些对象的每个人身上吗?

例如,我希望它们能够淡出。然后我有一个名为“AlphaThings”的类,在这个类中我写了一个简单的fadeout函数。

我不能以某种方式将此函数附加到另一个对象?喜欢

AlphaThings.fadeout(car);
AlphaThings.fadeout(truck);
AlphaThings.fadein(moped);

谢谢,对不起,如果有一些拼写错误的单词。

2 个答案:

答案 0 :(得分:4)

您正在尝试完成继承,这是一个类从另一个继承属性和方法的地方。

继承是在定义类时使用extends关键字完成的。

您的三个对象CarTruckMoped可以继承(扩展)AlphaThings,如下所示:

class Car extends AlphaThings
{
    //
}

您的Car现在将包含AlphaThings中定义的所有属性和方法,例如您提到的.fadein().fadeout()


奖励信息

当您扩展另一个类时,您可以更改基类中存在的方法在从其继承的类中的工作方式。这是使用override关键字完成的。

例如,您可能希望Car在使用.fadein()时执行稍微不同或额外的操作,因此您可以覆盖此方法:

override public function fadein():void
{
    // Some additional logic.
    // ...

    super.fadein();
}

super.fadein()用于调用原始.fadein()函数。如果省略此项,则可以完全重写该函数并忽略先前定义的操作。


关于此特定情况

这个答案当然直截了当,通过解释如何实现继承来直接回答问题。话虽如此,您尝试实现的目标可以使用其他一些路线更干净地完成。

例如,请考虑此Tweening Library by Greensock。该库可以以不同的方式处理任何对象上的任何值(包括alpha)的转换。以下是为什么这对使用继承来说很好的一些例子:

  1. 该库与您的实际对象完全分开。
  2. 可以使图书馆功能强大,而不会让所有其他游戏对象比他们需要的更重。您会注意到,例如,您可以使用许多类型的过渡样式(例如,缓和,轻松等) - 想象一下,如果所有这些都是您的基础对象的一部分。
  3. 您可以使用库定位任何内容,这意味着您无需从示例中扩展AlphaThings即可使用它。
  4. 如果您决定不再需要它或者您已经找到了更好的东西,那么与其他图书馆分离或交换相对容易。
  5. 您可以在项目中轻松地重复使用该库,而不必在新项目中从AlphaThings中提取部分代码。

答案 1 :(得分:1)

您可以在父类中声明所需的行为,然后从中派生出Car,Truck和Moped。然后他们会得到方法。

以下链接更详细地解释了它: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fcd.html