主要思想
已经编写了许多有关基准测试应用程序,引擎和各种软件系统的书籍,文章和教程。
这是旧的维基百科在这个问题上给我们的:
性能测试,基准(英文基准)-确定计算机系统的相对性能特征所必需的控制任务。
但是,如果我们从另一端稍微讨论基准测试游戏引擎的问题呢? 所有(而且不仅是)用于游戏开发的游戏引擎和SDK都经常将自己宣传为非常直观且易于消化的工具。 我们正在销售简单易学,令人惊叹的学习和入门曲线,轻巧美观的示例,这些代码在启动时会产生一种美妙的魔力。 因此,在为即将到来的Ludum Dare活动做准备时,我再次决定环顾四周,看看简单的Emele的“市场”提供了什么?Emele从事游戏开发已经有一年不到一年了。 就是说,正是CA的一群人中的一员出售了这些易于消化的非常出色的品质。

如果我们...在使用各种引擎编写游戏时尝试进行基准测试,该怎么办? 是的,是的,就是他们的生产力。 从字面上看,拿一些,用笔记本电脑,互联网和秒表将自己锁在一个山洞里,然后用整洁的平板电脑写下我们所有的结果,然后尝试得出一些结论。 同时,我们注意到我很喜欢它,它在使用一个或另一个引擎时感到惊讶或紧张。
关于基准
因此,测试对象是三个游戏引擎。 在这里(或多或少)正式地(尽可能多地)描述您的“配置”可能是值得的(是的,就像典型的基准测试结果一样,他们编写Iron配置,运行位置,基准测试描述等)。
“配置”或关于我
我是Java开发人员。 5年以上工业发展经验。 同样在我的工作中,我用JavaScript编写了Lua shell(确实,确实有点)。 高等技术教育。 我没有参加设计课程,没有学习游戏设计,我只是各种PC游戏的热心粉丝。 去年,他开始对制作最简单的计算机游戏感兴趣。
关于任务
选择了游戏Doodle Jump的克隆版本的测试项目。 我敢肯定,很多人都知道或玩过它,这是一款非常酷而且非常发达的Android游戏。

规定如下:
- 每个引擎有4个小时的时间。 这包括学习,熟识,nose鼻涕,尝试编写原型,调试游戏,通常包括创建游戏的整个周期。
- 每隔半个小时,我会在短暂的休息时间内尝试修正所做的工作,以某种方式纠正我的工作,概述进一步的工作计划,做笔记,做笔记等等。
- 在开始测试每个引擎之前,我们将尝试将游戏项目分解为其组成元素,以便为其分配常规单元。 因此,我们用鹦鹉来衡量每个引擎的游戏开发人员的“生产力”,并且可以用文字而不是文字来比较结果,至少可以比较一些数字。
将游戏分解为组件
在非常抽象和顶层的形式中,我看到自己是游戏的组成部分,如下所示:
- 播放器(雪碧,跳跃行为,对按下的按钮的反应)
- 关卡对象:平台,敌人等。
- 物理:球员的跳跃速度,自由落体的加速, 只有从上方跳下的平台才可以处理碰撞, 如果玩家从平台的底部越过,则让玩家通过 。
- 程序级别的生成:新平台和敌人的飞行初始化和添加到级别(到任意位置,但有一定的规则和限制),为玩家创造了诱人的游戏环境
- 当玩家向上移动时跟随玩家的“摄像机”。 相机应保持玩家对玩家的可见性,并逐渐与他“反弹”,以显示出现在渲染区域(在相机可见性中)的新平台。
Game Over
触发机制。 如果玩家到达可见区域的下边缘(至少已经跳了一次),他将输- 计分球员。 我们只会更新玩家的身高计数器。 我们将根据到达的最后一个平台(他上次下推的平台)更新计数器
HUD
:显示播放器进度。 高度显示。
为简单起见,我们为每个组件分配鹦鹉单元的一个点。 总计上限-即 该项目的完整版本为8分。
以下是显示中使用的资产。 这些是手绘的(如您所见,我不是艺术家)字符和平台精灵,尺寸为64x64,* .png格式。


并给出一些流程图:
- 因此,将为玩家执行“性别”的计算(记住,跳起来时,屏幕会移动,并且在屏幕边缘越过意味着沟)

- 因此,我们计算并更新每个节拍的玩家的垂直速度(
y_velocity
)和y
坐标,它受两个因素的影响:重力加速度( GRAVITY
)和平台,达到该水平时,玩家会被击退,速度完全恢复

- 像其他机制一样,用于计算水平速度的算法不在本文的讨论范围之内。
顺便说一句,我还有问题:
- 无论如何,为玩家实施摄像机跟踪会更好吗? 到目前为止,它将与玩家能够到达的最后一个最高平台的垂直坐标相关联,因此该平台位于可见区域的下部,我们可以看到生成的关卡的新片段。
- 平台生成算法本身。 根据我的想法,这将是一种“平台工厂”,它在游戏周期(
dt
)的每个周期中都知道存在于该级别且具有随机高度值(一定阈值,不超过玩家的跳跃高度,但也不少于一定比例)的最高平台。它的高度,以使平台不会紧贴在一起),当玩家前进时,会在水平上添加一个新平台。 游戏的复杂性问题在这里也很有趣,即如何改变生成这些平台的方式。
对于您在这两个毫无疑问的游戏设计问题上的想法,生活中的折衷和建议,我将非常高兴。
关于引擎
对我来说,三位候选人具有非常有趣的特征。 因此,下面总结了在分析测试结果时要记住的有用参数。
因此,我们看到选择非常有趣。 有趣的是,我们将处理我们的发动机质量和特性的不同组合。 让我们看看最终有什么解决方案:一个我已经掌握了一些手的引擎,一个抽水的YP引擎,或者一个完全有希望的芯片给我的全新引擎,但还没有完全掌握,此外,还没有使用我的主要开发语言。
为什么不使用Unity / Unreal Engine / Other Awesome Engine等?
许多人可能想知道为什么,我没有遵循标准方式,并且没有采用我们这个时代最常见的旗舰产品:Unity或Unreal Engine? 我会这样表达自己的想法:我想构建一个非常简单,简约和小巧的游戏。 具有构成游戏机制的几个游戏元素,一个可玩角色,简单的关卡生成并且没有特殊效果或非常传统的特殊效果,例如在旧的街机上。 因此,比喻地讲,我的任务是在黑色正方形上绘制一个红色圆圈,为此,我受邀参加Photoshop
。 简而言之, Unity
的一系列功能,模式和功能使我感到恐惧。 在此阶段,我想了解我的游戏的每个细节。

这最好由简单和小型的引擎完成,这些引擎具有有限的功能集,也许没有最佳的调整和生态系统,但是简单性和局限性也各有特色。 仅使用一套有限的工具-就Love2D而言,您的工具就是您的代码,仅此而已,您将专注于粉丝,编写有趣的东西,恢复角色或玩家的环境。 更加复杂的引擎已经扩展了您的选择范围,并且编写代码可以顺利地用于许多方面:编写脚本(代码),链接脚本,映射资产,添加配置,重新定义配置,混合第三方插件,为第三方插件编写脚本和配置,多次单击数十个对话框和窗口...让我们暂时说,我仍然惧怕如此复杂,无疑是先进而强大的游戏开发引擎。 恩,我不想再想起C#/ JS / C ++并在上面写东西。
在选择带有指向该视频的链接的引擎时,我将总结我的动机。在我看来,作者从字面上确实从我的语言中删除了我一直试图用自己的语言写给自己和其他人的文字: https : //www.youtube.com/watch v = JH8xwNOQ0TM
折
Defold
是King的跨平台引擎。
支持平台:
- HTML5(WebGL)
- Android 2.3(API等级9)+
- iOS 8.0以上
- Windows Vista +
- OSX 10.7以上
- 的Linux
奇怪的是,金由动视暴雪 ( Activision Blizzard )拥有。
开发语言Lua
吸引了我这个引擎,该语言对许多游戏构建平台的支持以及他们自己的跨平台IDE
发行版也可以安装在Linux上。 在Defold
与。 Corona SDK
。
以下是在控制点进行的操作的日志:
以下是扰流板中的一些gif动画,它们显示了时间进度:
结果,基准点:
- 播放器(精灵,跳跃行为,对按下的按钮的反应)
(V) Yes
- 关卡对象:平台,敌人等。
(V) Yes
- 物理:球员的跳跃速度,自由落体加速,只有从上方跳下的平台才可以处理碰撞,如果玩家从平台的底部越过,则让其通过。
(V) Yes
- 程序关卡生成:初始化并在飞行中向新平台和敌人添加关卡(在任意位置,但有一定的规则和限制),为玩家创造诱人的游戏状况
(X) No
- 当玩家向上移动时跟随玩家的“摄像机”。 相机应保持玩家对玩家的可见性,并逐渐与他“反弹”,以显示出现在渲染区域(在相机可见性中)的新平台
(X) No
- 游戏结束触发机制。 如果玩家到达可见区域的下边缘(至少已经跳了一次),则该玩家输了
(X) No
- 计分球员。 我们只会更新玩家的身高计数器。 我们将根据到达的最后一个平台(他上次下推的平台)更新计数器
(V) Yes
- HUD:显示播放器进度。 高度显示。 (可选)似乎原始游戏中没有进度指示器。
(V) Yes
基准分数:5/8
Love2d
这是用于创建原型的非常简约但功能强大且灵活的引擎。 通常,由于具有适当的灵活性,它甚至适合于将成熟的游戏发布到市场上。 有一些很好的鼓舞人心的例子。 副手, 一和二 。
总的来说,对于该引擎,我推荐来自Habr的一系列非常合适的教程,它们激发了我的兴趣,并为该引擎的开发提供了强大的动力,我只给出第一部分的链接,然后就可以将其转到其余部分: 在Lua和LÖVE上创建游戏-1
因此,以下是在检查点执行的操作的日志:

计算引擎的“性能”:
- 播放器(精灵,跳跃行为,对按下的按钮的反应)
(V) Yes
- 关卡对象:平台,敌人等。
(V) Yes
- 物理:球员的跳跃速度,自由落体加速,只有从上方跳下的平台才可以处理碰撞,如果玩家从平台的底部越过,则让其通过。
(V) Yes
/ (X) No
// *已实现,但不是很完美,存在重大缺陷。 我会在这里输入0.5分以完成该项目。 - 程序级别的生成:初始化并在飞行中向新平台和敌人添加级别(到任意位置,但有一定的规则和限制),为玩家创造诱人的游戏状况
(V) Yes
- 当玩家向上移动时跟随玩家的“摄像机”。 相机应使玩家保持对玩家的可见性,并逐渐与他“反弹”,以显示出现在渲染区域(在相机可见性中)的新平台
(V) Yes
- 游戏结束触发机制。 如果玩家到达可见区域的底部边缘(至少已经跳了一次),则该玩家输了
(V) Yes
- 计分球员。 我们只会更新玩家的身高计数器。 我们将根据到达的最后一个平台(他上次下推的平台)更新计数器
(V) Yes
- HUD:显示播放器进度。 高度显示。 (可选)似乎原始游戏中没有进度指示器。
(V) Yes
基准分数: 7.5 / 8
爪哇
也许合乎逻辑和合乎逻辑的步骤将是仔细研究引擎,在这里,开发语言是我最有经验和敏捷的语言,不是吗? 其实,直觉和一些内在的感觉使我略有偏离。 事实是,作为一名学生,我不知怎么地看着我的同学使用了jMonkey
引擎。 工具,引擎,文档,所有这些共同构成了一种不太令人满意的画面。 似乎该引擎并没有给您提供与它交朋友的机会,它的使用在某种程度上看起来不愉快。
但是,尽管如此,我还是决定看一下今天可用的东西,而我只看那些只能保证2D
的引擎,我并不关心3D
支持。 其中的一种引擎Lightweight Java Game Library 3的名称为Lightweight
。 具有讽刺意味的是,主页上最简单的基本示例(几个屏幕长)被吓跑了。
是的, Java
当然非常冗长,您想要的就是您所说的。 但是我知道您可以在上面写非常紧凑和非常有表现力的东西。 我看到了一个漂亮而紧凑的API。
最后,选择权落在了FXGL
。 起初,我没有任何热情和激动,这是在开发一些有趣的东西或库之前发生的。 但是从第一个示例以及文档和示例的简短页面开始,此引擎就使我越来越感到惊喜。 在他提出的方法和API中,一切都是合理的,可理解的和一致的。 它绝对可以帮助您为游戏,处理程序逻辑, HUD
, AI
,碰撞和其他元素构建清晰灵活的循环。
有趣的时刻和FXGL芯片:
顾名思义,对于可视部分,引擎使用JavaFX API( JavaFX
被用作图形框架)及其所有用于渲染和布局的功能和反功能。 总的来说,我认为这是一个很好的决定。 因此,作者避免了许多问题(无需实现和维护渲染组件,可以使用Java
生态系统中的改进解决方案)。 这是作者本人在他的第一批教程中所说的,我真的很喜欢这个短语:
“对于大多数UI对象,我们只需要使用JavaFX对象,因为不需要重新发明轮子。”
但是,总的来说,当然,您当然也有JavaFX
许多功能和缺点(我对这些细节不是很了解),但是据我所知,在您的项目中使用JavaFX
有一些许可限制,而且看来JavaFX
只能在JDK
有限交付中使用( Oracle
,也许更多)。
我从存储库开始倾斜了一个测试项目,在此基础上我开始对游戏进行雕刻,在每次游戏开始后,请将其放入logs/
项目logs/
。 这非常方便,您可以立即查看开箱即用的调试信息,对于诊断,了解突然发现引擎研究中遇到的麻烦时的理解非常有用。
同样(显然,使用基本设置),游戏也会通过按Esc
提供一个弹出菜单。 这也是一个不错的奖励,我希望它是自定义的,或者至少已被代码或配置禁用。
Debag终于在这里工作了 ! 终于! 至少可以说,在Love2D
中不方便Love2D
愉快。
开发日志
以下是对我的进步的简要总结,在此我简短地指出了30分钟的间隔后所取得的成就,以及我的一些想法和评论。 看这四个小时我的意识日志!
GIF- , .
"" … , , , ? .
Benchmark Score: 8
, ,
:
, , , ( ). , , Java FXGL
, , Lua
, . , , .
:
FXGL
? . Love2D
, Defold
, , , , Love2D
- , .- , . , . (, ), . , - . , , , , . , , , . .
- gif-, . . , , "" , .
?
, - , ?
因此:
- , . , , , , . - , - (
Love2D
). - - ,
Love2D
, . F to pay respect
. - . , , , - - , , (, , )
- . 4 , . -
Game Jam
, . - ! , , - Roadmap , , . (!) (?) . 30 . , . , , ! , pet- 44 -
Ludum Dare
.