1

在我正在开发的游戏中,一个班级负责绘制精灵,而另一个班级负责操纵坐标(即,如果精灵即将离开屏幕,请将其停在那里。是的,我知道这一点是矢量图形)。无论如何,我需要在两个类之间共享坐标。我曾尝试使用类扩展来执行此操作,但这会产生堆栈溢出,因为超类(绘制精灵的类)必须创建子类的实例(将要操作变量的类)。

// In the superclass Render
public AnimateMC mc = new AnimateMC( 2 ); // AnimateMC is the subclass of the 
                                             superclass, Render
//later in the program
//code for drawing all of the shapes in the sprite
mc.gravitizeY(); // this is why I need to make an instance of AnimateMC

// In the subclass AnimateMC
// animates sprite by changing the coordinates

我如何能够在两个类之间共享整数变量坐标而不扩展一个类。

4

2 回答 2

4

您已经了解到滥用继承不会解决这个问题。而是通过组合扩展:将精灵的引用从一个对象传递到另一个对象并使用该引用。

所以给需要访问sprite的类一个Sprite变量,sprite,然后通过setter方法传入Sprite引用,即

public void setSprite(Sprite sprite) {
   this.sprite = sprite;
}

或通过类的构造函数设置它。

于 2012-07-01T23:00:16.767 回答
3

这是一个基本的模型视图控制器问题,我猜你错过了它的“控制器”部分。您需要一个中心类,它的工作是管理游戏逻辑(模型)和显示逻辑(视图)并在它们之间共享数据。那里有很多资源,我链接到的维基百科文章是一个好的开始。

从您提出问题的方式来看,我怀疑您还没有很好地掌握对象继承-没关系,这并不完全简单-但是您几乎从不想扩展对象以在两个不同的类之间共享数据,这听起来像是您在这里尝试做的事情。

“我应该扩展这个对象吗?”的一般经验法则 是Has-A 与 Is-A 的关系。基本上,如果一个对象是另一个对象,那么一个对象可能应该扩展另一个对象。如果不是,他们不应该。这么想Car Is-A VehicleCar extends VehicleCar Has-A SunroofSunroof应该扩展Car。再次,阅读链接以获取更多信息。

于 2012-07-01T23:11:19.467 回答