我已经做了一段时间的网络程序员,我也可以用Java编程。我有一个小型多人RPG游戏的想法,我想继续努力。它将通过用户网络浏览器中的Java小程序播放。
我已经编写了游戏设计的设计文档和规范。我现在想知道的是我如何开发游戏?我过去只使用类似Windows的商业应用程序,内置的文本框小部件,下拉菜单等。通过游戏编程,我似乎必须为游戏的UI构建自己的小部件/控件。
这些是我想到的具体问题:
1)如何在下载游戏的图像,声音等时使用进度条显示“加载...”消息。 (使用java applet)
2)如何使用自己的菜单,控件等创建游戏的UI。例如,通过单击地图图标,它将向他们显示地图。点击朋友图标可以让他们与朋友聊天等。
3)我应该了解的其他一般游戏开发问题,比如我是否应该使用2D或3D图形,游戏中的物理等等。
如果有一本好书可以帮助我,请分享。
答案 0 :(得分:3)
如果这是你的第一款游戏,多人游戏项目可能过于雄心勃勃。
加载屏幕并不是非常困难 - 我通过计算我需要“加载”的文件数来实现它们,然后每次成功加载另一个文件时推进进度条(并进行屏幕刷新)。您可以使用尽可能多的粒度来执行此操作 - 这可能会使您的加载代码复杂化以添加UI组件。我现在不担心;也许只是抛出一个基本的“正在加载......”框架,然后在游戏更加稳固时实现一个完整的进度条。我也看到了一些很好的多线程实现。
另外两个将有经验;我认为你需要的更多是游戏开发的一般教程,而不是具体的答案。你一定要小一些。一旦你理解了较小游戏的结构和问题,就可以更容易地将它们应用到更大的游戏中。
最合理的游戏编程书籍将超越基本的游戏结构;我喜欢Game Coding Complete,但对初学者来说这很复杂(它涵盖了更复杂的方法来处理大型项目)。游戏架构和设计类似,但可能更适合您正在寻找的内容,因为它还涵盖了一些小型项目管理“最佳实践”。
使用Java原始UI类型(取决于您正在使用的其他库)以及您自己编写自己的“HUD”实现时,有很多不同的UI方法。
答案 1 :(得分:2)
可能值得熟悉的一件事是多线程。例如,使用“加载屏幕”,您可能有一个线程显示进度条,而其他线程同时加载数据。
类似地,通过调度多个线程同时执行多项操作(在屏幕上移动不同的字符)或通过用户输入处理中断,可以实现大部分交互。
答案 2 :(得分:2)
答案 3 :(得分:1)
不要去java applet路线。
如果你想制作一款快速休闲游戏,请将其制作成Flash;否则,开发一个完整的Java应用程序并通过java web start运行它。
尝试使用Tower来了解使用Java作为平台的程度,以及Java Web Start的工作原理。
至于进度条的事情,我建议你实现这些文件的加载,并在你进入进度条之前实际使用它们:)
答案 4 :(得分:1)
使用各种语言和系统的OpenGL,从C到C#,从Python到Java,有大量从基础到高级的教程。
我发现这非常有用,是一个很好的书签资源。 它应该让您开始使用您所选择的平台/语言进行游戏/ 3D编程的基础知识。
祝你好运!
答案 5 :(得分:1)
正如其他人所说,java applet可能不是您想要展示游戏的媒介。第二大多数人看到一个小程序开始加载他们在恐惧中运行。
如果您根本没有游戏设计经验,那么您可以使用多人游戏RPG设置高标准。您可能希望从一个更简单的项目开始,例如重新创建类似俄罗斯方块,pacman甚至乒乓球的东西,这样您就可以了解创建游戏的所有内容。
如果你打算做在线游戏,Flash很棒,Java加上Jogl open-gl包装器也是一个不错的选择。
我个人建议使用Microsoft Xna。 C#与Java相似,你应该能够相当快地获取它,而Xna可以很好地抽象掉图形编程中涉及的一些较低级别的细节。社区也非常积极和乐于助人。
答案 6 :(得分:1)
回答问题3.如果你真的热衷于开始开发游戏,我建议你阅读short article by Jeff Howland。
答案 7 :(得分:1)
最简单的方法是将所有内容打包到Jar文件中。默认屏幕确实显示了一个具有customise的小功能的进度条。您可以编写自定义代码来跟踪,管理和下载文件,但我个人会建议不要使用此路由。如果您搜索applet加载器,您将找到更多信息。
我不是100%确定你的意思,但你可以像在应用程序中使用它们一样使用Swing components。使用带有图像的JButton非常简单,然后在actionPerformed方法中挂钩事件代码。
This页面提供了大量有用的游戏开发链接。 Pulp core是一个值得检查的开源框架 - 即使您不使用该框架,也可以调查代码。
你是否应该使用Java applet似乎超出了这个问题的范围,但是很多上述答案都给出了关于是否使用Java applet的客观(或根本没有理由)。如果这是一个学习Java的个人练习游戏,那么这是一个很好的方法。如果您希望将其公开,则需要考虑当前adoption levels是否足以满足您的需求。
最近applet世界发生了变化。由于1.6 update 10与Flash相比更具竞争力 - 下载量更小(通常低于4Mb),因此启动时间缩短并引入了new scaling look and feel。
答案 8 :(得分:0)
Q1 = 1%的时间。
Q2 = 40%的时间。
Q3 = 59%的时间。
您可能也会问我如何为Web浏览器编写Halo3。
稍微低一点开头....
答案 9 :(得分:0)
在game theory and design上的opencourseware课程。它还附带reading list。
答案 10 :(得分:0)
由于我无法添加评论,我将添加一个答案。我建议不要使用线程来移动字符等。对于文件加载,播放声音,甚至是服务器端网络,它运行良好,但任何类型的AI /图形,都会导致无休止的麻烦。
此外,正如其他人所提到的,Java可能不是最佳选择。人们说这很简单的原因是它很难。与C ++相比,Java游戏开发的支持/教程的数量相当缺乏(GameDev.net是很好的资源,但随着时间的推移它更多地转向专业开发),Flash(体面教程on Kongregate as以及作为一个可以为你主持游戏的地方),甚至是C#(使用XNA)。多年来Java游戏开发已经有所改进,你可以用它做一些令人惊奇的事情,但最终可能更难以走这条路。无论你选择哪种语言,一定要考虑使用图形/游戏引擎,因为它会减少你的工作量,并希望你有希望创造一个更好的游戏。
答案 11 :(得分:-1)
如果您正在寻找一个温和的游戏开发途径,并且不介意学习C#,XNA有一个围绕学习如何编写游戏的整个社区。它有各种各样的样本 - Game State Management示例显示了实现屏幕转换和加载的好方法,并且网络内容有类似的Network Game State Management示例。他们还提供整个游戏作为源代码下载。
无论您的长期目标是制作Java小程序,Flash游戏,还是希望使用OpenGL在C / C ++中工作,XNA都是忽略渲染/声音的所有细节实现细节的好方法等等当你想要制作你的第一场比赛时,这非常有用,相信我。
答案 12 :(得分:-1)
不要使用java applet方法;小程序通常很烦人,而且很慢。
如果你真的希望它可以在浏览器中播放,可以考虑使用Flash(动作脚本),或者也许是silverlight(我对Silverlight中的游戏了解不多)。
Gamedev是一般游戏编程的绝佳资源
而且......
我会无耻地从yx的回答中窃取链接: