如何学习游戏开发?

3
我已经做了一段时间的Web程序员,并且也会编写Java程序。我有一个想法,想要开发一个小型的多人在线角色扮演游戏。玩家将通过Java applet在其Web浏览器中进行游戏。
我已经编写了设计文档和游戏规格说明。现在我想知道如何开发这个游戏?过去我只使用内置文本框、下拉菜单等小部件的类似于Windows的商业应用程序。但是,在游戏编程方面,似乎我需要为游戏的用户界面构建自己的小部件/控件。
以下是我心中具体的问题:
1)如何使用进度条显示“正在加载...”消息,同时下载游戏的图像、声音等(使用Java applet)。
2)如何创建游戏的用户界面,包括自己的菜单、控件等。例如,点击地图图标会显示地图。点击好友图标将允许他们与朋友聊天等。
3)还有其他一些一般性的游戏开发问题,例如是否应该使用2D或3D图形,游戏中的物理学等。
如果有一本好书可以帮助我,欢迎分享。
13个回答

3
如果这是你的第一个游戏,多人游戏项目可能太过雄心壮志。
加载屏幕并不是非常难 - 我通过计算我需要“加载”的文件数量,并在成功加载另一个文件时推进进度条(并进行屏幕刷新)来实现它。您可以根据需要进行细致的调整 - 这可能会使您的加载代码变得复杂以添加UI组件。现在不用担心它;也许只需放置一个基本的“正在加载...”框架,然后在游戏更加稳定时再实现完整的进度条。我还看到了一些很好的多线程实现。
另外两个问题会随着经验而来;我认为你更需要的是有关游戏开发的通用教程,而不是具体答案。你应该从小做起。一旦你理解了较小游戏的结构和问题,就更容易将其应用于较大的游戏。
大多数合理的游戏编程书籍都会介绍基本的游戏结构;我喜欢《Game Coding Complete》,但对于初学者来说相当复杂(它涵盖了更复杂的方法来处理大型项目)。《Game Architecture and Design》类似,但可能更适合您寻找的内容,因为它还涵盖了一些小型项目管理的“最佳实践”。
有许多不同的方法来处理用户界面,从使用Java原始UI类型(取决于您使用的其他库)到自己编写仅包含所需内容的“HUD”实现。

2

有一件事情可能值得熟悉,那就是多线程。例如,在“加载屏幕”中,您可能有一个线程显示进度条,而其他线程同时加载数据。

同样地,大部分交互性都将通过调度多个线程来同时完成许多事情(移动屏幕上的不同角色),或者处理用户输入引起的中断。


2

1

不要选择Java小程序的路线。

如果你想制作一个快速的休闲游戏,可以使用Flash;否则,开发一个完整的Java应用程序并通过Java Web Start运行它。

尝试Tower,看看你能在Java平台上走多远,以及Java Web Start的工作原理。

至于进度条的事情,我建议你在实际使用这些文件之前先实现它们的加载,而不是去做进度条的视觉效果 :)


Java Web Start可以让应用程序从浏览器中运行?不错。 - Ali
1
使用正确的Java可以让您使用酷炫的3D游戏开发库,Java有一些很好的游戏开发库。请尝试http://tower.sourceforge.net/,看看Java Web Start + Java适合游戏开发的程度。 - alamar
JNLP应用程序需要安装,即使您已经安装了JVM。 - Pool
我可以运行Java小程序和其他Java应用程序,所以我猜测我已经安装了JVM。然而,Java Web Start总是要求我下载.jnlp文件(我在其他一些游戏中也看到过)。这能避免吗? - Ali
@池子胡说。小程序支持jnlp加载,无需安装。 - Nikola Yovchev
显示剩余2条评论

1

http://nehe.gamedev.net/

这个网站有很多OpenGL的教程,从基础到高级,使用各种语言和系统,从C到C#,从Python到Java。

我发现这非常有用,是一个很好的资源可以收藏。它应该能够帮助你开始学习你选择的平台/语言的游戏/3D编程的基础知识。

祝你好运!


1

正如其他人所说,Java小程序可能不是您想展示游戏的媒介。大多数人看到小程序开始加载就会惊恐地逃跑。

如果您完全没有游戏设计经验,那么以多人在线角色扮演游戏为目标,您的门槛非常高。您可能需要从一个更简单的项目开始,比如重新创建类似俄罗斯方块、吃豆人甚至乒乓球之类的东西,这样您就可以了解创建游戏所需的所有内容。

如果您决定做在线游戏,Flash是一个很好的选择,Java加上Jogl open-gl包装器也是一个很好的选择。

个人建议使用Microsoft Xna。C#与Java相似,您应该能够很快掌握它,而Xna在图形编程中抽象出一些较低级别的细节。社区也非常活跃和有帮助。


我做了一个小的吃豆人游戏,谢谢:)。我最困惑的是第二个问题(即用户界面)。 - Ali
最基本的方法是将精灵绘制到屏幕上,并设置它们的z值,使它们出现在其他所有元素的顶部。例如,Zelda在屏幕左上角绘制3个心形精灵来表示您的健康状况。 - DMMcKinnon

1

1
  1. 最简单的方法是将所有内容打包成一个Jar文件。默认屏幕会显示一个进度条,有一些小的自定义能力(可链接)。您可以编写自定义代码来跟踪、管理和下载文件,但我个人建议不要选择这种路线。如果您搜索applet加载器,您会找到更多信息。

  2. 我不太确定您的意思,但您可以像在应用程序中使用它们一样使用Swing组件。使用带有图像的JButton非常简单,然后在actionPerformed方法中挂接事件代码。

  3. 您可能遇到的最大问题是动画和EDT。我之前问过这个

这个页面有很多游戏开发有用的链接。Pulp core是一个值得一看的开源框架 - 即使你不使用该框架,你也可以研究其代码。

是否应该使用Java applets似乎超出了这个问题的范围,但很多上面的答案都给出了客观的(或根本没有)关于是否使用Java applets的理由。如果这是一个为了学习Java而进行的个人练习,那么这是一个很好的方法。如果你希望将其公开,你需要考虑当前采用水平是否足够高。

最近在小程序领域发生了很多变化。自从1.6更新10以来,它与Flash的竞争更加激烈 - 下载大小更小(通常不到4Mb),启动时间缩短,并且引入了新的缩放外观和感觉


关于#2,我想知道是否可能使用Swing组件在右侧显示一个表示游戏世界的不断移动的区域(移动的角色、建筑物、地形等)和一组按钮。 我想会使用repaint()方法来绘制游戏世界。您有什么想法吗? - Ali
抱歉回复晚了。是的,这是可能的,您可以使用一个带有JPanel的布局来移动世界,并在另一个面板上放置静态位置的按钮(即正常组件)。Repaint可以使用,但最终您可能需要研究主动渲染以更紧密地控制动画。 - Pool

0

Q1 = 你的时间的1%。

Q2 = 你的时间的40%。

Q3 = 你的时间的59%。

你可能会问我如何在Web浏览器上编写Halo3。

先从更低的目标开始吧......


0

1
这是一种嘲讽性回复,博弈论是数学的一个迷人分支,但对于编写第一个闪存FPS游戏并不真正必要。 - sammyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接