我正在尝试制作一款简单的游戏。我有一个用于屏幕缓冲区的类,一个用于图像的类,以及一个用于精灵的类。我的问题是:
由于每个sprite都需要“属于”某个图像(sprite只保存某些图像中的坐标,以及指向图像的指针/引用),我应该将图像类传递给sprite构造函数,如下所示:
Sprite spriteInstance(imageInstance, rect, ...);
或者通过图像类
的方法返回精灵Sprite spriteInstance = imageInstance.createSprite(rect, ...);
或者这是个人偏好的问题。 (两者显然都有效,我只是想知道一个人是否被认为是“正确”或“专业”的方式。)
图像/屏幕关系也是如此:屏幕应返回表面,还是图像通过屏幕。
我还没有尝试实现的第三个选项是拥有一个“游戏”类,并执行此操作:
Game gameInstance;
Image imageInstance = gameInstance.loadImage(path);
Sprite spriteInstance = gameInstance.newSprite(imageInstance, rect, ...);
如果推荐上面的第二种/第三种方法,是否应该将sprite类构造函数作为“朋友”将图像类设为私有,还是保留为公共?这种类型的方法是否有一个名称,我可以查找进一步的见解?这是什么被称为“工厂模式”?
由于
答案 0 :(得分:1)
看起来你在这里有两个不同的问题:在哪里放置基于图像创建精灵的逻辑,以及是否使用工厂方法。
我建议反对imageInstance.createSprite
,除非图像知道存在一个名为Sprite的类实际上是有意义的。如果可能的话,您希望保持单向可视性。因此,除非图像依赖于精灵,否则不要让它知道类Sprite
存在。
我可能会建议
Sprite s = Sprite.forImage(image, rect);
如果不了解游戏,图片和精灵的课程(以及职责),我不能说更多。
至于工厂方法,是的,坚持下去。有效的Java有很好的章节。