【问题标题】:How to learn game development? [closed]如何学习游戏开发? [关闭]
【发布时间】:2009-05-22 18:00:21
【问题描述】:

我从事网络程序员已经有一段时间了,我也可以用 Java 编程。我有一个想要开发的小型多人 RPG 游戏的想法。它将通过用户网络浏览器中的 java 小程序播放。

我已经编写了游戏的设计文档和规范。我现在想知道的是如何开发游戏?过去我只使用过类似 Windows 的商业应用程序,其中包含用于文本框、下拉菜单等的内置小部件。对于游戏编程,我似乎必须为游戏的 UI 构建自己的小部件/控件。

这些是我想到的具体问题:

1) 如何在下载游戏的图像、声音等时显示带有进度条的“正在加载...”消息。 (使用java小程序)

2) 如何使用自己的菜单、控件等来创建游戏的 UI。例如通过单击地图图标会向他们显示地图。点击朋友图标可以让他们与朋友聊天等。

3) 以及我应该了解的其他一般游戏开发问题,例如我应该使用 2D 还是 3D 图形、游戏中的物理等。

如果有对我有帮助的书的好推荐,请分享。

【问题讨论】:

    标签: java applet java-web-start


    【解决方案1】:

    如果这是您的第一款游戏,那么多人项目可能过于雄心勃勃。

    加载屏幕并不难——我通过计算我必须“加载”的文件数量来实现它们,然后每次成功加载另一个文件时推进进度条(并进行屏幕刷新)。您可以根据需要使用尽可能多的粒度来执行此操作 - 添加 UI 组件可能会使您的加载代码复杂化。我暂时不用担心;也许只是抛出一个基本的“正在加载...”框架,然后在游戏更稳定时实现一个完整的进度条。我还看到了一些很好的多线程实现。

    另外两个会随着经验而来;我认为您需要的更多是游戏开发的通用教程,而不是具体的答案。你绝对应该从小处着手。一旦您了解了小型游戏的结构和问题,就更容易将其应用到大型游戏中。

    大多数合理的游戏编程书籍都会介绍基本的游戏结构;我喜欢 Game Coding Complete,但它对于初学者来说相当复杂(它涵盖了处理大型项目的更复杂的方法)。游戏架构和设计类似,但可能更适合您的需求,因为它还涵盖了一些次要的项目管理“最佳实践”。

    有很多不同的方式来实现 UI,从使用 Java 原始 UI 类型(取决于您使用的其他库)到根据您的需要自行编写自己的“HUD”实现。

    【讨论】:

      【解决方案2】:

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

      类似地,通过调度多个线程同时做很多事情(在屏幕上移动不同的字符)或处理用户输入的中断,大部分交互性都会发生。

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:
          1. 最简单的方法是将所有内容打包到一个 Jar 文件中。默认屏幕确实显示了一个带有customise 一些小功能的进度条。您可以编写自定义代码来跟踪、管理和下载文件,但我个人建议不要使用这种方法。如果您搜索小程序加载器,您会找到更多信息。

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

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

          This 页面有一大堆有用的游戏开发链接。 Pulp core 是一个值得一试的开源框架——即使您不使用该框架,您也可以研究代码。

          您是否应该使用 Java 小程序似乎超出了这个问题的范围,但是上面的很多答案给出了关于是否使用 Java 小程序的客观(或根本没有理由)。如果这是一个学习 Java 的个人练习游戏,那么这是一个很好的方法。如果您希望将其公开,您需要考虑当前的adoption levels 是否足以满足您的需求。

          最近,Applet 世界发生了一些变化。由于 1.6 update 10 它与 Flash 相比更具竞争力 - 下载大小更小(通常低于 4Mb),启动时间缩短并引入了 new scaling look and feel

          【讨论】:

          • 关于#2,我基本上想知道是否可以显示一个代表游戏世界的不断移动的区域(移动角色、建筑物、地形等)和一组使用 Swing 组件的按钮到右边。我想我将使用 repaint() 方法来绘制游戏世界。有什么想法吗?
          • 抱歉延迟回复。是的,这是可能的,您可以为可移动世界使用带有 JPanel 的布局,以及另一个静态定位的面板上的按钮(即普通组件)。重绘是可以使用的,但最终您可能希望研究主动渲染以更严格地控​​制动画。
          【解决方案5】:

          http://nehe.gamedev.net/

          拥有从 C 到 C#、Python 到 Java 等各种语言和系统使用 OpenGL 的从基础到高级的大量教程。

          我发现这非常有用,并且是一个很好的书签资源。 它应该让您开始在您选择的平台/语言上进行游戏/3D 编程的基础知识。

          祝你好运!

          【讨论】:

            【解决方案6】:

            正如其他人所说,Java 小程序可能不是您想要展示游戏的媒介。第二个大多数人看到一个小程序开始加载他们害怕运行。

            如果您根本没有游戏设计经验,那么您对多人 RPG 的要求就很高。您可能想从一个更简单的项目开始,例如重新创建俄罗斯方块、吃豆人,甚至是乒乓球,这样您就可以了解创建游戏的所有内容。

            如果您打算做一个在线游戏,Flash 非常棒,Java 加上 Jogl open-gl 包装器也是一个不错的选择。

            我个人建议使用 Microsoft Xna。 C# 与 Java 非常相似,因此您应该能够相当快地掌握它,并且 Xna 在抽象出图形编程中涉及的一些较低级别的细节方面做得很好。社区也非常活跃和乐于助人。

            【讨论】:

            • 我确实做了一个小吃豆人游戏,谢谢:)。我最一无所知的是问题2(即ui)
            • 嗯,最基本的方法是将精灵绘制到屏幕上,设置它们的 z 值,以便它们出现在其他所有内容之上。例如塞尔达在屏幕左上角绘制 3 个心形精灵来代表你的健康
            【解决方案7】:

            不要走 java 小程序路线。

            如果你想做一个快速的休闲游戏,那就把它做成 Flash;否则,开发一个成熟的 java 应用程序并通过 java web start 运行它。

            试试Tower,看看您可以将 java 作为一个平台走多远,以及 Java Web Start 的工作原理。

            至于进度条,我建议您在使用进度条之前实现这些文件的加载并实际使用它们:)

            【讨论】:

            • java web start 让应用程序从浏览器运行?不错
            • 使用适当的 java 可以让你使用很酷的 3D 游戏开发库,java 有一些好的。试试tower.sourceforge.net 看看java web start + java 对游戏开发的适用程度。
            • 当我点击该游戏的立即播放时,它要求我下载一个 .jnlp 文件。这不是我想要的,它会破坏目的。我希望他们通过浏览器播放视频,同时留在我的网站上
            • 嗯,你安装了JVM吗?如果你不这样做,你为什么突然想做一个小程序?
            • JNLP 应用程序需要安装,即使您安装了 JVM。
            【解决方案8】:

            回答问题3。如果您真的热衷于开始开发游戏,我建议您阅读此short article by Jeff Howland

            【讨论】:

              【解决方案9】:

              Q1 = 1% 的时间。

              Q2 = 40% 的时间。

              第三季度 = 59% 的时间。

              您可能会问我如何为 Web 浏览器编写 Halo3。

              目标稍微低一点开始......

              【讨论】:

                【解决方案10】:

                game theory and design 上的开放课件课程。它还带有reading list

                【讨论】:

                • 这是一个尖刻的回答,博弈论是一个迷人的数学分支,但对于编写你的第一个 flash FPS 来说真的不是必需的。
                【解决方案11】:

                由于无法添加评论,我将添加答案。我建议不要使用线程来移动角色等。对于文件加载、播放声音,甚至服务器端网络,它运行良好,但任何类型的 AI/图形,它往往会导致无休止的头痛。

                另外,正如其他人所提到的,Java 可能不是最佳选择。人们这么说的原因很简单,就是很难。与 C++(GameDev.net 是很好的资源,但随着时间的推移,它的重点更多地转向专业开发)、Flash(体面的教程 on Kongregate 以及作为可以为您托管游戏的地方),甚至是 C#(使用 XNA)。 Java 游戏开发多年来得到了改进,您可以用它做一些令人惊奇的事情,但走这条路可能最终会变得更加困难。无论您选择哪种语言,一定要考虑使用图形/游戏引擎,因为它会减少您的工作量,并让您有希望创造出更好的游戏。

                【讨论】:

                • 我不喜欢有人来说不要使用 Java 使用 c++。我不会想到吗?我需要使用 Java,以便可以通过浏览器玩游戏。使用 flash 时,设计师的聘用成本非常高。因此出于纯粹的商业原因,我需要使用 java。如果您不能帮助我,请不要添加答案
                【解决方案12】:

                如果您正在寻找一种温和的游戏开发入门途径并且不介意学习 C#,XNA 拥有一个围绕学习如何编写游戏而建立的整个社区。它有各种样例——Game State Management 样例展示了一种实现屏幕转换和加载的好方法,还有一个类似的Network Game State Management 样例用于网络内容。他们还提供完整的游戏源代码供下载。

                无论您的长期目标是制作 Java 小程序、Flash 游戏,还是希望使用带有 OpenGL 的 C/C++ 工作,XNA 都是一种忽略渲染/声音/等等相信我,当您只是尝试制作您的第一款游戏时,这非常有用。

                【讨论】:

                • -1 有什么原因吗?感谢您的反馈;)
                【解决方案13】:

                不要使用 java applet 方法;小程序通常很烦人,而且速度很慢。

                如果您真的希望它可以在浏览器中播放,请考虑使用 Flash(动作脚本)或 silverlight(我对 silverlight 中的游戏了解不多)。

                Gamedev 是一个很好的通用游戏编程资源

                还有……

                我会无耻地从yx的答案中窃取链接:

                MIT Open Course Ware: Game Theory and Mechanism Design

                【讨论】: