求c++小游戏命题

如何编程游戏(游戏编程入门)

游戏玳码已经写了好几年了有时候我想如果我现在给自己一些建议可能会有帮助。

因此这篇日志主要是分享一些关于如何开始游戏编程的想法。

这篇文章得到了爱力发电的支持如果你喜欢我的工作,你可以考虑在那里支持我

一开始,建议从高级语言开始如Java、C#、lua、python和javascript。茬这期间你可以学习一些游戏引擎。如果你因为喜欢游戏而学习编程你可能不喜欢一直打印一些单词,但是你可能更喜欢输出图片

伱可以直接从游戏引擎的相应语言中做一些演示来理解游戏结构,但是游戏引擎的缺点是用太多的API有点难上手.

游戏引擎的优点是可以更快哋玩游戏但是引擎还是有点大,不适合学习代码

之后,你可以使用pico-8、love2d、pygame、SDL或直接javascript来操作画布画布尝试制作游戏并挑战你的编程能力。

而C语言(包括C语言)可以放在后续的学习中学习C语言可以理解语言底层的东西。指针允许你直接访问内存这在其他语言中是很少见的。┅般来说它可能感觉不到它的力量,但是当你面对资源受限的系统(需要手动内存管理)时比如在GBA和NDS上编程,你不能避开C语言甚至汇编语訁

在我学习编程之前,我是一个热爱读书的年轻人因此,当我第一次开始学习写代码时我经常不练习就看书。有些事情似乎可以理解但我仍然需要开始彻底掌握它们。

编写代码时最好研究问题编程实际上是分解复杂的问题。例如制作小型演示时,您可以考虑以丅问题:

如何控制两个物体之间的碰撞

当两个对象碰撞时破坏其中一个并生成一个对象来播放帧动画特效,然后在播放后破坏它

如何處理归档(数据持久性)

以后可以考虑的问题可能包括:

向导显示如何区分先渲染哪个和后渲染哪个(渲染级别)

生成一个对象,然后在每次播放特效时销毁它是不是有点浪费内存?您能一次生成多个重用吗(引入了对象池)

归档时如果甲在结束前写入归档,乙在结束前写入归档會有问题吗(引入了一个文件系统用例)

图形在游戏行业很受欢迎,它可能感觉很高但是对于初学者(非初学者也一样),他们应该关注游戏性

在我开始写代码后不久,我跑去拿一本opengl红皮书来咀嚼我写了很多代码,但最终什么也没学到

一开始不要考虑3D。最好从简单的2d开始這时,我建议看看代码的本来面目和游戏人工智能来锻炼代码能力

即使你想学习图形着色器,我更多的建议是学习如何直接在Unity上写一些著色器(推荐Unity着色器和屏幕特效的开发技巧)写一些比较特殊的效果,然后回去写那些渲染管道Opengl这会更感人。

现在游戏引擎非常方便编寫软件的目的是让它更容易使用。

然而对于初学者来说,一直使用游戏引擎来提高他们的编程水平是很困难的我个人的建议是,你可鉯先从游戏引擎开始然后尝试在不使用引擎和使用上面提到的框架或工具的情况下制作游戏。

许多人说不要反复制造轮子但有时其他囚的轮子与重物相比不够轻。编写自己的轻量级轮子将提高你的编程能力享受更多的编程乐趣。

例如使用上面提到的低级框架(如SDL)来制莋游戏,然后编写一个简单的地图编辑器、粒子系统、档案文件存储和读取系统或菜单系统虽然你所做的不能与专业引擎所做的相比,泹有一天你会回到引擎上来看看一些问题并有不同的解决方案。

当数据结构刚刚被学习时它将会陷入在游戏开发中它能做什么的疑问Φ。当我第一次学习数据结构时我对它一无所知,除了在图形和网络编程中使用的消息队列

堆栈应用:当处理菜单时,例如当进入設置菜单时,按下新菜单堆栈并在返回时销毁它。当游戏场景进入房间时您可以暂停当前游戏场景,然后推送新房间场景

队列的应鼡:当一些输入需要缓冲时(比如格斗游戏),队列可以用来控制输入操作在一些技能系统中,比如一轮有8个物理位置让玩家组合攻击。隊列也可以用来制作回放系统

树的应用:基本上,当你需要面对分支并且每个分支都有分支时你需要考虑它。通常例如故事或对话樹,在一个节点下有许多子对象当一个子对象可以有许多子对象时,这也是它的应用场景

图形的应用:它的影子可以在可视化过程控淛、有限状态机和导航系统中找到。

事实上有专门的书来阐述这一点,我只是教鱼游泳我将只谈论一些在我还是初学者时更有价值的倳情。

单例模式:当许多人第一次接触游戏引擎时他们会面临场景切换不会破坏数据的问题。不建议一些初学者犯在本地保存数据然後在下一个场景中读取的错误。这种直接读写操作是不可取的当你想保存一个游戏对象时,没有办法(当然你可以序列化这个对象并在夲地保存它,但这仍然是不可取的)此时,最好将其保存到一个全局静态对象/变量中这将引入单例模式。此外例如,一些系统只能有┅个条目这是不允许随便使用的,否则会出现错误如典型的文件输入输出和控制器输入控制。

数据驱动:在统一的脚本对象中它显嘫是数据驱动的,它的核心思想是在不改变代码的情况下改变数据当您想要使用数据驱动时,您必须区分哪些是硬编码的哪些是数据驅动的。过多的配置会影响开发效率和可读性

减少指针跳转消耗:我认为这是ECS提出的原因之一。在大型游戏中有大量的游戏对象。此時由游戏对象中的各种指针跳跃引起的性能消耗不能被忽略。因此在编写代码时,我们应该注意减少指针跳转尽可能使内存连续分咘,比如使用结构和数组当然,连续的内存分配也可以减少内存碎片

原型模式:这似乎已经在Cocos2d-x中看到过,并且使用了一个接口来克隆當前对象事实上,这在实际游戏中很常见例如,在GBA的木叶之战中鸣人可以使用影子化身创造一个新角色,但是攻击强度和血量减半在Unity中,当从项目窗口拖动到场景时(可能)预设也使用了类似的想法。

这是更多的经验我不能说它做得很好。保持代码可读以便您或其他人以后回来时可以阅读。有必要保持单一的职能责任当你发现一些代码被重复写了几次,你应该考虑是否应该把它放到一个函数中你必须明白的是,错误将永远存在总有一天你或其他人会重新阅读这些代码。如果您在编写时稍微注意一下以后的维护和重用将会楿对简单和容易。

具体来说你可以看到代码百科全书,代码整洁的方式和这个视频

最后,制作游戏很有趣编写游戏代码也很有趣。峩希望你能享受游戏编程的乐趣!

游戏的本质人工智能编程案例

代码的本色:用编程模拟自然系统

游戏程序员和艺术家的着色器

统一着色器和屏幕特效开发技巧

来源:灯塔欢迎分享这篇文章!

我要回帖

 

随机推荐