0

为了多功能性、活力和组织性,我想为游戏中的每个对象制作新的 .AS 文件。我的意思是,在射击游戏的情况下,我想为每种类型的子弹制作一个新的类文件,它们的所有独特属性都在各自的类中详细说明。我想对游戏中的每一种敌人都做同样的事情。

这一切都假设可能有 10 多种不同类型的敌人/子弹。

有些人一直在敦促我将每种类型的值(例如子弹)保留在一个类中,然后根据发射的子弹类型更改变量。这对我来说听起来不太有趣,我宁愿创建一堆不同的类文件,然后将所有项目符号推入一个公共数组(到目前为止有效),但我真的很想知道我是否有这样做是对的,甚至是好主意。

4

2 回答 2

1

在我看来,由于子弹(或敌人,就此而言)代表相同的家庭对象,因此拥有一个由每个具体类实现或扩展的通用接口或抽象类是有意义的。这是一个好主意吗?让我们这样想:

当您创建将在整个应用程序中使用的类时,您实际上是在构建一个 API。良好的实践建议您应该始终对接口而不是实现进行编程。这意味着您的顶级类不应依赖于低级类,而应使用抽象。这样,不同级别的组件松散耦合,整体代码更加灵活。这个原则被称为依赖倒置,是SOLID 设计的五项原则之一。

提供的链接应该提供一些关于如何构建代码的附加信息。

祝你有美好的一天!

于 2012-08-07T07:08:12.260 回答
1

您将希望使用继承来使其更清晰、更灵活地进行更改。然后,即使在多个项目中,您也可以扩展相同的通用基类。

从一个基类(或接口)开始 - 例如 Bullet.as - 并将所有项目符号共有的所有功能和属性放在该类中。任何时候你有一组具有相同属性的子弹,继续制作子类。因此,如果您有多种在接触时都会爆炸的子弹,您可以进行以下设置:

public class Bullet {
    public function fire():void {};

    public property size:int;
    public property strength:Number;
    public property label:String;
    public property maxDistance:Number;
} 

public class ExplodingBullet extends Bullet {
    public property blastRadius:Number;

    public function explode():void {
        trace("Kaboom");
    }
}

public class BazookaBullet extends ExplodingBullet {
    public function BazookaBullet():void {
        blastRadius = 10;
        label = "Bazooka";
        size = 5;
        maxDistance = 120;
    }
}

这将为您的火箭筒子弹提供它扩展的类的所有功能。与在所有项目符号类中重新创建所有相同的属性和方法相比,这样做有很多好处。

于 2012-08-07T22:28:41.453 回答