站内搜索

搜索

手游源码-游戏源码-棋牌源码资源网-亲测源码-游戏搭建-破解游戏-网站源码-qq技术

100金币/天 购买
100金币/天 购买

如何显示一个图片/精灵如何播放帧动画如何控制两个物体碰撞

11

主题

45

帖子

0

金币

绿钻会员

Rank: 3Rank: 3

积分
171
发表于 2022-1-8 05:00:09 | 显示全部楼层 |阅读模式
游戏代码也写了几年,有时候觉得给刚入行的自己提点建议可能会有帮助。所以这篇文章主要是分享我对游戏编程入门的一些想法。希望对你有帮助!



语言选择

一开始,更推荐从高级语言入手,如Java、C#、lua、. 在此期间,您可以学习一些游戏引擎。如果你因为喜欢游戏而学习编程,你可能不喜欢总是打印一些文字,你可能更喜欢输出图片。

可以直接从对应语言的游戏引擎做几个小demo来了解游戏的结构,但是游戏引擎有个缺点就是API太多很难上手……

游戏引擎的好处是做游戏会比较快,但是整体引擎还是略大,不适合学习代码。

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

C语言(包括C++)可以放在后续研究中天外神坛源码网,对C语言的研究可以理解语言的底层点。Like 指针可以让你直接访问内存,这在其他语言中是很少见的。你可能总体上感觉不到它的强大,但是当你面对资源受限的系统(需要手动内存管理),比如在 GBA 和 NDS 上编程时,C 语言甚至汇编语言都无法避免。

必须做得更多

在我学习编程之前,我是一个喜欢阅读的年轻人。所以当我刚开始学习写代码的时候,我经常在没有练习的情况下看书。有些东西看似明白,但实际上,我必须开始彻底掌握它们。

开始写代码的时候,最好是带着问题去学习。编程实际上是在分解复杂的问题。比如做一个小demo的时候,可以考虑这些问题:

如何显示图像/精灵

如何播放帧动画

如何控制两个物体的碰撞

当两个物体发生碰撞时,销毁其中一个,同时生成一个物体播放帧动画效果,播放完成后再销毁

如何播放音乐音效

背景层滚动效果怎么做

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

之后要考虑的问题可能包括:

如何显示精灵来区分哪个先渲染哪个后渲染(渲染级别)

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

归档时,如果A写入归档,B在结束前写入归档,会不会有问题(文件系统使用单例)

不要执着于

图形在游戏行业中更受欢迎,可能感觉很高,但对于初学者(实际上是非初学者)更应该关注。



刚开始写代码没多久,我就跑去抓一本红皮书看。我写了一堆代码,最后什么都没学到。

一开始不要考虑 3D 方面,从简单的 2d 开始是个好主意。这时候,我建议看代码的本质和游戏人工智能来锻炼编码能力。

就算你想学图形,我更多的建议还是直接用Unity学习写一些(推荐Unity 和屏幕特效开发技巧),等你可以写一些比较特别的之后再回去写那些渲染管线效果。会更加情绪化。

不要被锁定在游戏引擎中

现在的游戏引擎很方便,写软件的目的就是为了让它更容易、更容易上手。

但是一直使用游戏引擎会让初学者很难提高他们的编程技能。我个人的建议是先从游戏引擎入手,然后在不使用引擎的情况下尝试使用上面提到的框架或工具来制作游戏。

建造小轮子以帮助改进

很多人说不要重新发明轮子,但有时候别人的轮子不够重,不够轻。编写一个适合自己的轻量级轮子,也会提高你的编程能力,让你更享受编程的乐趣。

比如用上面提到的比较底层的框架(比如SDL)做一个游戏,然后写一个简单的地图编辑器,粒子系统,存档文件保存和读取系统或者菜单系统。虽然你所做的比不上专业的引擎,但有一天你回到引擎看一些问题,你会有不同的解决方案。

注意数据结构的应用

当你第一次学习数据结构时,你会陷入到这东西在游戏开发中能做什么的困惑中。除了网络编程中比较常用的图和消息队列中使用的寻路外,当我第一次学习数据结构时,我对它们一无所知。

堆栈的应用:处理菜单时怎么自己编写游戏代码,例如进入设置菜单时,将新菜单压入堆栈,返回时,弹出堆栈并销毁。当游戏场景进入房间时,可以暂停当前游戏场景,并可以将新的房间场景压入堆栈。

队列的应用:在某些需要缓冲输入的情况下(如格斗游戏),可以使用队列来控制输入操作。例如,在某些技能系统中,一回合中有 8 名具有耐力表的玩家来组合攻击。在制作播放系统时也可以使用队列。

树的应用:基本上当你需要面对树枝并且每个树枝都有树枝时。一个典型的例子是情节或对话树。节点下有很多子对象,子对象可以有很多子对象。也是它的应用场景。

图应用:在视觉过程控制中,有限状态机和导航系统都可以找到它的影子。

游戏开发设计模式应用

事实上,有专门的书籍可以解释这一点。我只是在玩斧头。我只会说一些在我还是初学者时对我来说更有价值的东西。

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

数据驱动:在Unity中,显然是数据驱动的,其核心思想是改变数据而不改变代码。当你想使用数据驱动时怎么自己编写游戏代码,你必须区分什么可以硬编码,什么可以数据驱动。过多的配置会影响开发效率和可读性。

减少指针跳转消耗:我觉得这也是ECS的原因之一。在大型游戏中,有大量的游戏对象。此时,如果游戏对象中存在各种指针跳转, 造成的性能消耗。所以在写代码的时候要注意减少指针跳转,尽量连续分配内存,比如使用结构体和数组。当然,内存连续分布也可以减少内存碎片。

原型模式:这个好像一开始是在-x中看到的,一个克隆当前对象的接口。这在实际游戏中其实很常见。比如在GBA的木叶战争中,鸣人可以使用影子分身生成新角色,但攻击力和血量减半。从窗口拖动到 Unity 中的场景时使用了类似的想法(应该是)。

注意干净的代码

这更像是一个经验性的事情,我很难说我做得很好。保持代码可读性是为了让您或其他人将来可以回来阅读代码。需要保持函数的单一职责,当你发现某些代码重复了好几次时,你应该考虑是否应该把它放到一个函数中。你必须明白的是,总会有bug,总有一天你或其他人会重新阅读这些代码。如果写的时候注意一下,后面的维护和复用会比较简单容易。

详情请看代码大全、代码清洁度和这个视频。

最后,游戏制作很有趣,编写游戏代码很有趣,希望你也喜欢游戏编程!
【天外神坛】免责声明及帮助
1.重要:如果遇到隐藏内容回复后显示为代码状态,直接刷新一下页面即可解决此问题。
2.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
3.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!
5.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
6.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上个主题 下个主题 快速回复 返回列表 客服中心 搜索 QQ加群
上个主题 下个主题 快速回复 返回列表 客服中心 搜索 QQ加群

QQ|Archiver|小黑屋|天外神坛

湘ICP备2021015333号

Powered by 天外神坛 X3.4 © 2020-2022 天外神坛