我是新来的,对 Linux 和软件开发还没有很多经验和知识。
我想开始学习软件和游戏开发,目前我正在构建一台 PC 以实现这一目标。我想开发支持三大平台(Windows、macOS 和 Linux)的软件或游戏。
我可以在一个操作系统上顺利开发支持三大平台的软件或游戏吗?就像如果我使用一个 Linux(其中有很多开发工具)并且想要开发也支持 Windows、macOS 和其他 Linux 发行版的软件或游戏,我可以做到这一点而不会在以后遇到诸如切换回操作系统之类的问题吗?来回测试它是否有效?或者我是否只需要安装所有操作系统(以及每个操作系统中的所有开发工具)并在每个操作系统中构建它们以获得每个支持?
答案1
是的,当然可以。
为此,您需要一种可以在所有目标机器上理解的通用语言。一旦你有了这样的语言 - 在它上面编写一个软件,而不使用特定于操作系统的代码,你就完成了。
你猜怎么着——这样的语言有很多,从 C、C++、Java 等等。您还可以使用多平台框架(语言加上一组库和工具)来完成多平台项目。
更好的是,有专为多平台游戏创建而设计的框架。目前,Unity 占据该列表的榜首。它将为您提供许多特定于游戏的功能并支持几乎所有现代操作系统。 Win/Max/Linux - Unity 的免费版本,以及商业版本中的十几个其他版本(包括 Xbox/PlayStation/等)。
答案2
@WhilteOwl 的回答非常好,我想补充一些。
你也可以尝试学习HTML5/ES6/CSS3这些Web编程技术。您可以使用它们来开发一种跨平台软件,可以在台式机、平板电脑、电视机和手持设备上运行。
您可以将其托管在网络上,以节省用户下载内容,并且有ElectronJS框架您可以使用它来构建可执行文件。
HTML 和 JavaScript 具有我认为最简单的学习曲线,尽管后端安全编程是一个困难的话题。
H5生态更多自由的我相信比 Unity 更可重用的组件,并且为此平台进行开发绝对不需要使用专有工具。
简单的2D游戏可以使用Canvas API来开发,3D游戏则有WebGL和WebGL2的支持。还有一些框架,例如三.js。
答案3
不幸的是,白猫头鹰的回答过于乐观。从理论上讲,事情应该是这样进行的。但实际上,情况并非如此——或者至少在某种程度上是这样。如果您尝试跨平台开发,则会有许多小问题和兔子洞等待着您。
例如,.NET 应该是跨平台的,但它不支持 Linux 上的本机 GUI 应用程序开发。 Blazor 理论上应该可以工作,但我曾经遇到过 Linux 特定的错误。另外,忘记 Visual Studio,您只能获得 Visual Studio Code,它功能较少且设置不太方便。
说 C 和 C++ 是平台无关的……好吧,甚至更不正确。菲林·库林评论道:
将 C/C++ 定义为通用语言有点误导。核心语言是通用的,这就是 C 的设计初衷。然而,如果不与操作系统交互,任何实际的 C 程序都不会真正存在,而且 Windows 从未与 Linux 存在任何真正的重叠。
鉴于实现定义的行为存在差异,即使是核心语言也不是完全通用的。
您当然可以尝试跨平台开发 - 但要警惕可能并且很可能会不时出现的微妙问题。
答案4
是的,这是可能的,正如其他答案所表明的那样。
我想补充的是,在开发游戏时,您将依赖于一整套软件:您将使用一种或多种编程语言以及软件库和框架来实现您想要使用但不使用的基本功能自己实施。
其中许多堆栈都适合跨平台开发,您需要选择一个,具体取决于
- 您希望游戏运行的硬件(笔记本电脑?手机?)
- 您希望其运行的软件环境(基于 Web?本机 GUI?基于文本?应该可编写脚本吗?等等)
- 您希望游戏满足的美观和功能要求
- 性能要求(对于井字棋来说很容易满足,对于拥有数百万用户的国际象棋服务器或第一人称射击游戏来说就不那么容易了)
- 你自己的经历
我认为最好的方法是亲自动手:
- 找到一款或多款看起来像您想要花时间制作的游戏的开源游戏,并且这些游戏适用于 Windows、MacOS 和 Linux
- 弄清楚需要什么来开发并做出小的改进
这将带您了解整个软件堆栈、构建过程、开发过程和项目沟通要求。一旦您了解了对您感兴趣的游戏类型进行微小更改所需的条件,您就会对开发此类游戏所需的内容有一定的了解。
就我个人而言,我只为一款游戏贡献了几行代码,即 Freeciv,它可以在 Linux、Windows、MacOS、Android 和其他一些操作系统上本机运行,并且还有一个基于 Web 的版本。这只是一个例子;只需在 Google 上搜索多平台游戏的示例,您可能会找到一些看起来像您想要制作的游戏类型。