1

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

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

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

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

谢谢,如果有一些拼写错误的单词,请见谅。

4

2 回答 2

4

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

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

您的三个对象CarTruck并且Moped可以像这样继承(扩展)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()函数。如果您忽略它,您可以完全重写该函数并忽略先前定义的操作。


关于这个特定场景

这个答案当然切中要害,通过解释如何实现继承来直接回答问题。话虽如此,您可以使用少数其他路线之一更干净地完成您想要实现的目标。

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

  1. 该库与您的实际对象完全分开。
  2. 该库可以随心所欲地变得强大,而不会使所有其他游戏对象变得比它们需要的更重。例如,您会注意到可以使用多种类型的过渡样式(例如缓出、缓入等)——想象一下,如果所有这些都是您的基础对象的一部分。
  3. 您可以使用该库定位任何内容,这意味着您无需AlphaThings从示例扩展即可使用它。
  4. 如果您决定不再需要它或者您找到了更好的东西,那么与另一个库分离或交换是相对容易的。
  5. 您可以在项目中轻松地重复使用该库,而不必从新项目中提取代码片段AlphaThings
于 2012-11-21T00:39:32.727 回答
1

您将在父类中声明您想要的行为,然后从中派生 Car、Truck 和 Moped。然后他们会得到方法。

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

于 2012-11-21T00:18:24.960 回答