我正在用libGDX库编写一个游戏,我有一个情况,我有两个边界框,用于碰撞检测,一个用于可旋转对象,另一个用于不可旋转的对象。可旋转继承自不可旋转。
我想制作一个游戏实体类,它具有渲染调试形状和动画等常用功能,并存储与游戏中所有实体相关的其他游戏信息。我只想在课堂上写作,然后扩展它以产生所有的游戏元素,但我想不出一种方法,因为其中一些可以旋转,而另一些则不会。现在我曾想过将边界框作为全局对象,但我再也想不出构建一个可以有两种类型的全局变量的方法,具体取决于我如何实例化对象。
有人可以帮忙吗?或者我正在采取错误的做事方式?
答案 0 :(得分:1)
您可以使用合成而不是继承。所以,例如:
class Box {}
class RotatableBox extends Box {}
class GameElement {
Box box; // could be RotatableBox
}
然后,您可以从框中委派所需的任何方法,以便可以直接从游戏元素访问它们。
答案 1 :(得分: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根据您的需要生成任何类型的对象。