Java游戏编程课程?
我正在做一个小小的策略游戏,以帮助我以有趣的方式学习Java。事情是我将这些单位视为自己在游戏地图上绘制的对象(使用图像和缓冲),并且会对附加在其上的侦听器的鼠标动作做出反应。Java游戏编程课程?
现在,基于我一直在阅读的有关基本游戏编程的一些教程,所有内容似乎都在我的Map类的Graphics方法中绘制。如果出现一个新的单元,我只需更新Map.Graphics方法,这并不像创建一个可以自己绘制的新Unit对象那么简单......在这种情况下,我会被困在一大堆Map方法中,而不是使用类来渲染新事物。
所以我的问题是,是否有可能使用渲染单元,接口对象等类,或者我将不得不创建方法,只做一些结构编程而不是面向对象?我有点困惑,我希望有一个关于如何组织的精神蓝图。
谢谢!
正如CK说,你可以用绘制界面做到这一点,是这样的:
public interface GameElement {
public void draw(Graphics g);
}
public class Sprite implements GameElement{
private Image image;
private int x;
private int y;
public void draw(Graphics g) {
g.drawImage(image,x,y,null);
}
}
public class GameLoop {
public void drawElements(final Graphics2D g, final List<GameElement> elements) {
for (final GameElement gameElement : elements) {
gameElement.draw(g);
}
}
}
,但你说你想这样做,有一个监听器,可以让你在未来的问题的方式。 正如破折号砰的声音已经指出的那样,所有的元素都在一个单独的游戏循环中渲染,所有的元素都已经被更新。如果你用一个监听器来做这件事,并且你有一个游戏循环或者其他线程修改单元列表,那么你最终可以进行并发访问修改。 此外,通过这种方式,您可以将所有元素绘制在一个点上,这样可以避免游戏中出现一些奇怪的闪烁现象。
听起来像你的对象需要有一个共同的接口,他们都可以下载到渲染。
E.g.有一个你的接口类型的通用列表,用游戏对象填充它,然后枚举列表并调用通用方法来进行渲染。
这是C#代码,但是当对象在列表中举行了它应该是对Java
public interface IRenderable
{
void RenderMe(Graphics graphics)
}
List<IRenderable> myGameObjects;
foreach (IRenderable myGameObject in myGameObjects)
{
myGameObject.RenderMe(myMap);
}
相似,它们可以对事件做出响应,并更新其内部状态准备下一个渲染周期。
虽然“真实”的游戏项目有许多形式,最终你有这样的事情:
while True:
ProcessUserInput()
for o in objects:
o.Update()
for o in objects:
o.Render()
使用任何机制找到亲爱实现任何和所有的这些功能。 :)多态是好的,所以你应该随时使用,如果你对此感到满意。 “世界地图”可能应该是列表中的第一项,除非您的渲染系统足够先进以处理乱序绘图(基本上是深度排序)。
从你的问题来看,这可能是单位属于地图?在这种情况下,Map.Render函数会遍历它拥有的所有单元,并依次对它们中的每一个调用Render。无论如何,如果绘制单元的代码在该单元的类中,它可能是最干净的。
祝你好运!