我正在尝试通过创建2D游戏来提高我的Java能力。我已经成功创建了一个基本的游戏,我现在回过头来看看我能做些什么来改进,我正在重新调整代码。我以前有一个drawObject方法,它内置了一个GameObject(我为我的游戏创建的另一个类),它必须将Graphics2D对象传递给它,但是现在我正在尝试扩展Graphics2D并构建所有的“draw(X) )“我在扩展类中创建的方法,以便我不必传递Graphics2D对象,但是我遇到了困难。
我按如下方式开始上课:public abstract class GameGraphics extends Graphics2D
。 Eclipse中没有出现错误,所以我运行它,但是当我在渲染时遇到错误,指出sun.java2d.SunGraphics2D
无法强制转换为扩展它的类的实例。
错误显示在以下行:GameGraphics graphics = (GameGraphics) strategy.getDrawGraphics();
尽管我需要使用Graphics2D中的特定方法,但我试图让它扩展Graphics而不是看看会发生什么。我修改了对Graphics2D函数的调用并发现没有错误,但是当我运行它时,我得到了完全相同的错误。甚至SunGraphics2D也是如此。
在我看来,显而易见的解决办法是让类只包含Graphics2D的一个实例,而不是扩展Graphics2D,但是如果可能的话,我更倾向于扩展。
任何帮助将不胜感激!
答案 0 :(得分:1)
问题在于这一行:
GameGraphics graphics = (GameGraphics) strategy.getDrawGraphics();
从您的策略对象获取的Graphics对象不是GameGraphics对象,并且如此投射它并不是这样。只有当你可以修改策略以便它实际上产生一个GameGraphics对象时才能进行转换,尽管我不确定你是想要这样做还是可以做到这一点(至少不容易)。正如卡亚曼所说 - 使用组合来获得你想要的东西,而不是继承。