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。无论如何,如果绘制单元的代码在该单元的类中,它可能是最干净的。

祝你好运!