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

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

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

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

一开始,建议从高级语言开始,如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中,当从项目窗口拖动到场景时(可能),预设也使用了类似的想法。

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

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

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

2019/12/23

编码游戏玩家

游戏设计、原型和开发

游戏程序员的数据结构

游戏编程模式

代码大全

代码清洁之道

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

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

游戏编码完成

游戏编程算法和技术

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

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

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

c++游戏编程100事列_游戏编程入门(c++小游戏编程100例)相关推荐

  1. python单机小游戏大全手机版宫殿_用Python实现童年小游戏俄罗斯方块!别说还挺好玩!...

    存储图书的相关信息,包括书名,作者,类型,数量.主码是name和author. 2.2 borrow表 借书单,存储借书人ID,书名,作者,借书时间.主码是name和author. 2.3 user表 ...

  2. vb趣味编程弹球小游戏_最好玩的微信小游戏集合,总有一款是你没玩过的

    大家好,这里是小雅龙生活趣味时间,自从17年微信推出小游戏程序以来,微信小游戏行业可谓是炙手可热,知道2019年不断有许许多多的微信小游戏如雨后春笋般的生根发芽.下面就由我带大家来看看今年最好玩,最受 ...

  3. c#小游戏_.NET手撸2048小游戏

    前言 2048是一款益智小游戏,得益于其规则简单,又和 2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎" FlysEngine,从空白窗口 ...

  4. HTML5游戏_基于DOM平台跳跃小游戏开发_9.按键监听

    HTML5游戏_基于DOM平台跳跃小游戏开发 按键监听 视频讲解 HTML5游戏 效果图 本章知识点: 对象自定义名称属性,可以用变量来命名属性名称 //这段代码把多个属性(品牌, 型号, 排量)赋给 ...

  5. 4399小游戏童年的乐趣,python爬取4399全站小游戏

    大家好,我是辣条. 前言 2021年已到尾巴尖尖了. 今天照镜子,看着镜子中的自己,发现还是跟年轻时一样的"帅",看到头部的时候又发现相比半个月之前的发际线,它好像又往上移了一点点 ...

  6. 星益小游戏平台源码 内置80多个在线小游戏

    简介: 星益小游戏平台源码是一款星益在线小游戏可的网站源码,本程序由小星合集整理制作,共计80个小游戏. 内置了80个在线小游戏,直接就能玩耍,上传到空间用! 本程序大部分都是自适应,但是使用电脑端体 ...

  7. Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式

    Python版儿童识字游戏源代码,结合植物大战僵尸和儿童识字的小游戏,含学习模式和娱乐模式. 娱乐模式下,僵尸会头顶不同的汉字,此时屏幕会提示要消灭的汉字,移动豌豆消灭对应汉字的僵尸,如果攻击非提示汉 ...

  8. python生成一笔画_用Python玩烧脑小游戏《一笔画完》,瞬间闯到100关

    原标题:用Python玩烧脑小游戏<一笔画完>,瞬间闯到100关 " 昨天和朋友出去外面吃饭,吃完饭后朋友打开了一个小程序玩了起来...... 游戏长这样 大概玩法是:从地图中猫 ...

  9. android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...

    很多编程爱好者都编写过推箱子游戏编程吧,最近有好些朋友看见我以前的推箱子程序后, 问我是怎么做的.我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空.正好现在放假了,而且离回 ...

  10. python打地鼠脚本_制作一个打地鼠的小游戏!100行Python代码轻松搞定

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于萝卜大杂烩 ,作者周萝卜 游戏画面 首先先进行游戏画面排版, classTopWin ...

最新文章

  1. Cento7+Nginx 之 URL重写
  2. 修改LDAP查询默认1000条限制
  3. dubbo优势_Dubbo 迈出云原生重要一步 应用级服务发现解析
  4. 解决Vue跳转到当前路由报错问题
  5. java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved
  6. pthread_attr_init线程属性
  7. imx6 android快速启动,android启动不起来(已解决)
  8. 一篇文章带你吃透 hashmap(面试指南升级版)
  9. python3指定目录所有excel_如何用python遍历文件夹下的所有excel文件
  10. c+ 引用传递坑_了解C ++中的引用传递
  11. nginx 启动失败
  12. Git用命令提交代码并合并
  13. Go 语言学习总结(3)—— Go 开发必备库与工具总结
  14. C语言大作业指针字符串处理,[C语言-PTA]说反话-加强版 — 字符串的指针式处理 | 祭夜の咖啡馆...
  15. 扫地机器人的喋血江湖
  16. 解决序列长期依赖的法宝——注意力机制
  17. 找高清视频素材,就上这6个网站。
  18. python 列表作业
  19. 照明控制系统在呼和浩特商场楼宇的应用
  20. 【Java字符串分割[split()]和截取[substring()]】

热门文章

  1. Apache Jemeter 参数化
  2. C#自学总结_Day2
  3. Confluence 6 LDAP 用户结构设置
  4. IOS中如何显示带有html标签的富文本
  5. AxInterop.ShockwaveFlashObjects.dll 问题
  6. chrome中Js的setAttribute支持不好?
  7. 三菱驱动器参数表_三菱 M 参数表
  8. Broadcasting in Python
  9. sf上的SIMD的程序库
  10. 花了半个多小时,纯手点,为500多人点赞