-1

我正在使用 libGDX 库编写游戏,我有两个边界框,用于碰撞检测,一个用于可旋转对象,一个用于不可旋转对象。可旋转的继承自不可旋转的。

我想制作一个游戏实体类,它具有渲染调试形状和动画等通用功能,并存储与游戏中所有实体相关的其他游戏信息。我只想从这个类上写,然后扩展它以产生所有的游戏元素,但我想不出一种方法,因为其中一些可以旋转,而另一些则不能。现在我曾想过简单地将边界框作为一个全局对象,但我想不出一种方法来构造一个全局变量,该变量可以是两种类型,具体取决于我如何实例化对象。

任何人都可以帮忙吗?还是我正在做的只是错误的做事方式?

4

2 回答 2

1

您可以使用组合而不是继承。因此,例如:

class Box {}
class RotatableBox extends Box {}
class GameElement {
  Box box; // could be RotatableBox
}

然后,您可以从框中委派所需的任何方法,以便可以直接从游戏元素访问它们。

于 2013-04-04T20:29:48.197 回答
0

出色地...

既然你指责我在你的评论中提供了虚假信息(并声称你理解多态性),这里有一个简单的例子来证明你肯定可以调用子类的方法,即使对象被声明为父类班级。

class ParentClass
{
    public void sayHey()
    {
        System.out.println("I am a parent");
    }
}

class ChildClass extends ParentClass
{
    public void sayHey()
    {
        System.out.println("I am a child");
    }
}

public void testIt()
{
    ParentClass p = new ChildClass();
    p.sayHey();  // prints "I am a child"
}

同样的概念也适用于实现接口的类。

在您的游戏中,您可以使用接口或超类来表示可旋转或不可旋转的游戏实体。

您可以根据需要使用 GameEntityFactory 生成任一类型的对象。

于 2013-04-04T19:20:06.680 回答