C 2D游戏开发基础

C 2D游戏开发基础,c,2d-games,C,2d Games,我想用C语言从头开始写一些简单的马里奥式游戏。但老实说,我不知道怎么做,我也找不到任何好的免费教程 但实际上,到目前为止,我只编写了WinAPI程序,所以所有事件处理和用户输入都是由操作系统处理的,只需最少的工作量,但要开发游戏,比如带有非矩形按钮的菜单、动画等等,我想,WinAPI中没有这样的东西,taht可以帮助我解决这个问题,而不仅仅是一些基本的例程鼠标指针位置和按键 那么,编写游戏的正确方法是通过操纵玩家、敌人甚至自己的背景对象来编写游戏引擎的整个绘图部分,而不仅仅是使用directdr

我想用C语言从头开始写一些简单的马里奥式游戏。但老实说,我不知道怎么做,我也找不到任何好的免费教程

但实际上,到目前为止,我只编写了WinAPI程序,所以所有事件处理和用户输入都是由操作系统处理的,只需最少的工作量,但要开发游戏,比如带有非矩形按钮的菜单、动画等等,我想,WinAPI中没有这样的东西,taht可以帮助我解决这个问题,而不仅仅是一些基本的例程鼠标指针位置和按键

那么,编写游戏的正确方法是通过操纵玩家、敌人甚至自己的背景对象来编写游戏引擎的整个绘图部分,而不仅仅是使用directdraw输出到屏幕吗

编辑:
实际上,我想从零开始学习如何编写游戏,因为它必须是很棒的编程经验,如果你考虑像Doice热衷于DOS的游戏,没有框架或库创建,但仍然很棒。

< P>简而言之,是的,WiAPI中没有什么能帮到你很多。然而,有几十个游戏引擎,你可以建立你的游戏,这将需要大量的艰苦工作,创造游戏本身。谷歌搜索一下对你有帮助


(个人推荐:虽然从技术上讲,它是一个3D引擎,但类似的东西是一个优秀的引擎,它包含了创建2D游戏的教程。Unity不是C,但它确实让您的生活更轻松……。

一个好方法是查看SDL库。我并不是说它一定是2D游戏的最佳库,但它很容易入门,而且web上充斥着使用SDL编写的简单自制2D游戏的教程和开源代码示例

<>编辑:我实际上想从零开始学习如何编写游戏,因为它一定是很棒的编程经验,如果你考虑像Doice热衷于DOS的游戏,没有框架或库,但仍然很棒。 这其实并不完全正确。Commander Keen(以及任何DOS游戏)确实使用库:DOS、BIOS等提供的库。如果没有这种或那种形式的库,您将无法使用C做任何有用的事情。对于游戏编程,您确实希望将所有低级细节留给其他人


我推荐作为游戏编程的入门库。

我也推荐SDL,但您肯定应该看看教程,它非常棒。

你们在说什么,WinAPI有低级绘图例程

虽然使用像SDL这样的已建立的库可能是一个更好的主意,但是您可以创建自己对WinAPI绘图例程的抽象,而不需要太多困难


然后,只需创建包含所有绘图指令和解释输入的while循环。对于2D游戏来说,这并不太难。

我也使用了SDL,但试着看看。它至少需要DirectX 8.0,因此您的应用程序只能在Windows上运行,但在他们的论坛上,您会发现许多关于如何将其移植到OpenGL的主题。在我看来,HGE将比SDL更容易学习,因为SDL是一个低级的库,你必须学会如何自己处理许多事情。HGE更愿意从开箱即用开始。

看看这一个

他们有很多关于游戏编程的资源和很多初学者的东西。SDL是好的,但是你应该考虑在开始编码之前学习基本的游戏技术,甚至在开始思考你使用的API/LIBS之前。p>

清除你需要多少“智能”(KI),考虑一下提前加载/保存,…如果你想完成你的项目,你应该记住很多事情。 你需要游戏编辑器吗?(还有..工作)声音/图形呢?如果你没有经验的话,你自己写这些东西会花费很多时间。创建内容是另一个大问题,如果你真的这么做的话,它会耗费大量时间


也许这会帮助你了解一些开发人员的孩子,因为这会让你了解他们的引擎是如何工作的。就像这个(过时的)

当我开始编程的时候,我开始用Allegro做它,回到了以前的好DOS时代。它是第一个使用SVGA库的可用库,并且具有良好的sprite支持。然后版本3出现了,他们增加了对windows的支持(使用GDI和Directy X,您可以在运行时选择使用哪个引擎)。linux端口实现了,一切都很好

这是一个非常基本的2D库,它将教你图形和动画的基础知识。现在它甚至包含音频支持,这是一个非常需要的补充(好吧,我仍然记得v2.9X…)。它们在版本5的betas中,我认为这是一个有趣的项目


我几天前刚刚开始了一个类似的项目,您可以在上查看。
它应该会让你对游戏的结构有所了解。以及带有碰撞的滚动2D地图的一些细节(如果你想让它100%无bug,这会非常复杂)。哦,这里很多人已经建议它使用SDL

对我来说,这是我的第一个C项目。但我必须承认,我以前在Java和Python中也做过类似的事情,所以这对我来说是快速学习C语言的一个好方法。由于它是学习而不是任何有成效的东西,我使用的是普通的C99,这使得任务更加“有趣”

但是回到游戏,在开始编码之前,你真的需要考虑一下你的设计,把它写在一张纸上,或者如果你像我一样,没有树的东西,用伪代码写

考虑尽可能多的游戏状态,没有什么比仅仅因为没有考虑功能就必须从头开始重新实现整个玩家/地图/任何东西更糟糕的了