基准测试

主要思想


已经编写了许多有关基准测试应用程序,引擎和各种软件系统的书籍,文章和教程。


这是旧的维基百科在这个问题上给我们的:


性能测试,基准(英文基准)-确定计算机系统的相对性能特征所必需的控制任务。

但是,如果我们从另一端稍微讨论基准测试游戏引擎的问题呢? 所有(而且不仅是)用于游戏开发的游戏引擎和SDK都经常将自己宣传为非常直观且易于消化的工具。 我们正在销售简单易学,令人惊叹的学习和入门曲线,轻巧美观的示例,这些代码在启动时会产生一种美妙的魔力。 因此,在为即将到来的Ludum Dare活动做准备时,我再次决定环顾四周,看看简单的Emele的“市场”提供了什么?Emele从事游戏开发已经有一年不到一年了。 就是说,正是CA的一群人中的一员出售了这些易于消化的非常出色的品质。


彼得·格里芬(Peter Griffin),正如我们所想的那样,应该采用什么游戏引擎来进行开发


如果我们...在使用各种引擎编写游戏时尝试进行基准测试,该怎么办? 是的,是的,就是他们的生产力。 从字面上看,拿一些,用笔记本电脑,互联网和秒表将自己锁在一个山洞里,然后用整洁的平板电脑写下我们所有的结果,然后尝试得出一些结论。 同时,我们注意到我很喜欢它,它在使用一个或另一个引擎时感到惊讶或紧张。


关于基准


因此,测试对象是三个游戏引擎。 在这里(或多或少)正式地(尽可能多地)描述您的“配置”可能是值得的(是的,就像典型的基准测试结果一样,他们编写Iron配置,运行位置,基准测试描述等)。


“配置”或关于我


我是Java开发人员。 5年以上工业发展经验。 同样在我的工作中,我用JavaScript编写了Lua shell(确实,确实有点)。 高等技术教育。 我没有参加设计课程,没有学习游戏设计,我只是各种PC游戏的热心粉丝。 去年,他开始对制作最简单的计算机游戏感兴趣。


关于任务


选择了游戏Doodle Jump的克隆版本的测试项目。 我敢肯定,很多人都知道或玩过它,这是一款非常酷而且非常发达的Android游戏。


原始涂鸦跳游戏


规定如下:


  1. 每个引擎有4个小时的时间。 这包括学习,熟识,nose鼻涕,尝试编写原型,调试游戏,通常包括创建游戏的整个周期。
  2. 每隔半个小时,我会在短暂的休息时间内尝试修正所做的工作,以某种方式纠正我的工作,概述进一步的工作计划,做笔记,做笔记等等。
  3. 在开始测试每个引擎之前,我们将尝试将游戏项目分解为其组成元素,以便为其分配常规单元。 因此,我们用鹦鹉来衡量每个引擎的游戏开发人员的“生产力”,并且可以用文字而不是文字来比较结果,至少可以比较一些数字。

将游戏分解为组件


在非常抽象和顶层的形式中,我看到自己是游戏的组成部分,如下所示:


  1. 播放器(雪碧,跳跃行为,对按下的按钮的反应)
  2. 关卡对象:平台,敌人等。
  3. 物理:球员的跳跃速度,自由落体的加速, 只有从上方跳下的平台才可以处理碰撞, 如果玩家从平台的底部越过,则让玩家通过
  4. 程序级别的生成:新平台和敌人的飞行初始化和添加到级别(到任意位置,但有一定的规则和限制),为玩家创造了诱人的游戏环境
  5. 当玩家向上移动时跟随玩家的“摄像机”。 相机应保持玩家对玩家的可见性,并逐渐与他“反弹”,以显示出现在渲染区域(在相机可见性中)的新平台。
  6. Game Over触发机制。 如果玩家到达可见区域的下边缘(至少已经跳了一次),他将输
  7. 计分球员。 我们只会更新玩家的身高计数器。 我们将根据到达的最后一个平台(他上次下推的平台)更新计数器
  8. HUD :显示播放器进度。 高度显示。

为简单起见,我们为每个组件分配鹦鹉单元的一个点。 总计上限-即 该项目的完整版本为8分。


以下是显示中使用的资产。 这些是手绘的(如您所见,我不是艺术家)字符和平台精灵,尺寸为64x64,* .png格式。


我们的弹跳性格


世界上最好的平台


并给出一些流程图:


  1. 因此,将为玩家执行“性别”的计算(记住,跳起来时,屏幕会移动,并且在屏幕边缘越过意味着沟)
  2. 因此,我们计算并更新每个节拍的玩家的垂直速度( y_velocity )和y坐标,它受两个因素的影响:重力加速度( GRAVITY )和平台,达到该水平时,玩家会被击退,速度完全恢复
  3. 像其他机制一样,用于计算水平速度的算法不在本文的讨论范围之内。

顺便说一句,我还有问题:


  1. 无论如何,为玩家实施摄像机跟踪会更好吗? 到目前为止,它将与玩家能够到达的最后一个最高平台的垂直坐标相关联,因此该平台位于可见区域的下部,我们可以看到生成的关卡的新片段。
  2. 平台生成算法本身。 根据我的想法,这将是一种“平台工厂”,它在游戏周期( dt )的每个周期中都知道存在于该级别且具有随机高度值(一定阈值,不超过玩家的跳跃高度,但也不少于一定比例)的最高平台。它的高度,以使平台不会紧贴在一起),当玩家前进时,会在水平上添加一个新平台。 游戏的复杂性问题在这里也很有趣,即如何改变生成这些平台的方式。

对于您在这两个毫无疑问的游戏设计问题上的想法,生活中的折衷和建议,我将非常高兴。


关于引擎


对我来说,三位候选人具有非常有趣的特征。 因此,下面总结了在分析测试结果时要记住的有用参数。


引擎YaP引擎方面的经验(0-否,1-有经验和一些简单的书面游戏,2-始终掌握该引擎YP的经验(0-不,1-有经验和良好的知识,并且对语法,语言习语有很好的理解,2-此YP的优点
a01个
Love2da1个1个
FXGL爪哇02

因此,我们看到选择非常有趣。 有趣的是,我们将处理我们的发动机质量和特性的不同组合。 让我们看看最终有什么解决方案:一个我已经掌握了一些手的引擎,一个抽水的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
以下是在控制点进行的操作的日志:


不行时间留言
1个30m我们回顾了1个教程,几个编辑器的介绍性说明,测试了一个测试项目(点击处理程序的编码,培训项目的阅读底座)
21小时对测试培训项目进行了一些修改。 也许是时候开始您的项目并尝试至少在那里实现一些东西了?
31h 30m跳的人造的(与行为的精灵)。 还不错! :)
42小时是时候添加控件了。 而且该是添加平台和碰撞的时候了吗? 添加了管理和平台,但是可惜,我没有处理冲突..
52h 30m碰撞! 一个人必须知道如何跳到平台上,然后从平台上进一步推升。 那好 有冲突,但是到目前为止,机械师的工作是歪曲的:)
63小时万岁,有冲突,这似乎是事实。 我试图放置多个平台副本。
73h 30m现在,我们应该考虑当玩家跳到新的更高平台时,漂浮的摄像机上下浮动。 我没有前进,只是埋在拧紧相机的复杂过程中……似乎很容易,而且安装相机非常容易。
84小时平视显示器 显示播放器在地板上方的当前高度。

以下是扰流板中的一些gif动画,它们显示了时间进度:


隐藏文字

0-1小时
0-1小时
1-2小时
1-2小时
4小时
4小时


结果,基准点:


  1. 播放器(精灵,跳跃行为,对按下的按钮的反应) (V) Yes
  2. 关卡对象:平台,敌人等。 (V) Yes
  3. 物理:球员的跳跃速度,自由落体加速,只有从上方跳下的平台才可以处理碰撞,如果玩家从平台的底部越过,则让其通过。 (V) Yes
  4. 程序关卡生成:初始化并在飞行中向新平台和敌人添加关卡(在任意位置,但有一定的规则和限制),为玩家创造诱人的游戏状况(X) No
  5. 当玩家向上移动时跟随玩家的“摄像机”。 相机应保持玩家对玩家的可见性,并逐渐与他“反弹”,以显示出现在渲染区域(在相机可见性中)的新平台(X) No
  6. 游戏结束触发机制。 如果玩家到达可见区域的下边缘(至少已经跳了一次),则该玩家输了(X) No
  7. 计分球员。 我们只会更新玩家的身高计数器。 我们将根据到达的最后一个平台(他上次下推的平台)更新计数器(V) Yes
  8. HUD:显示播放器进度。 高度显示。 (可选)似乎原始游戏中没有进度指示器。 (V) Yes

基准分数:5/8


Love2d


这是用于创建原型的非常简约但功能强大且灵活的引擎。 通常,由于具有适当的灵活性,它甚至适合于将成熟的游戏发布到市场上。 有一些很好的鼓舞人心的例子。 副手,


总的来说,对于该引擎,我推荐来自Habr的一系列非常合适的教程,它们激发了我的兴趣,并为该引擎的开发提供了强大的动力,我只给出第一部分的链接,然后就可以将其转到其余部分: 在Lua和LÖVE上创建游戏-1


因此,以下是在检查点执行的操作的日志:


不行时间留言
1个30m设置项目,创建基本处理程序,创建播放器类(具有跳转逻辑和引力的框架仍然不起作用)
21小时制造了一个工厂,描绘了平台,制造了一个跳跃的人。 万岁!
31h 30m试图搞定hardoncollider库。 沮丧的是,官方网站上的基座是根据过时的版本编写的,搜索当前的基座,搞砸了碰撞。 尚未实施碰撞
42小时有冲突,但它们是曲线:(
52h 30m发生了冲突,但存在一些缺陷,但总的来说是规范。 尝试固定跟随玩家跳跃的摄像机。 还不是很成功..
63小时有一代平台,但是碰撞仍然是越野车和la脚的:(
73h 30m实施“游戏结束”的定义-确定玩家跌落到可见区域的下边缘。 计分已实施-即 显示在最后拍摄的高度的左上角
84小时在Love2d引擎上开发了4个小时的Doodle Jump克隆之后,所获得的成就请参见下表。

4小时内在Love2D上完成游戏的最终版本


计算引擎的“性能”:


  1. 播放器(精灵,跳跃行为,对按下的按钮的反应) (V) Yes
  2. 关卡对象:平台,敌人等。 (V) Yes
  3. 物理:球员的跳跃速度,自由落体加速,只有从上方跳下的平台才可以处理碰撞,如果玩家从平台的底部越过,则让其通过。
    (V) Yes / (X) No // *已实现,但不是很完美,存在重大缺陷。 我会在这里输入0.5分以完成该项目。
  4. 程序级别的生成:初始化并在飞行中向新平台和敌人添加级别(到任意位置,但有一定的规则和限制),为玩家创造诱人的游戏状况(V) Yes
  5. 当玩家向上移动时跟随玩家的“摄像机”。 相机应使玩家保持对玩家的可见性,并逐渐与他“反弹”,以显示出现在渲染区域(在相机可见性中)的新平台(V) Yes
  6. 游戏结束触发机制。 如果玩家到达可见区域的底部边缘(至少已经跳了一次),则该玩家输了(V) Yes
  7. 计分球员。 我们只会更新玩家的身高计数器。 我们将根据到达的最后一个平台(他上次下推的平台)更新计数器(V) Yes
  8. HUD:显示播放器进度。 高度显示。 (可选)似乎原始游戏中没有进度指示器。 (V) Yes

基准分数: 7.5 / 8


爪哇


也许合乎逻辑和合乎逻辑的步骤将是仔细研究引擎,在这里,开发语言是我最有经验和敏捷的语言,不是吗? 其实,直觉和一些内在的感觉使我略有偏离。 事实是,作为一名学生,我不知怎么地看着我的同学使用了jMonkey引擎。 工具,引擎,文档,所有这些共同构成了一种不太令人满意的画面。 似乎该引擎并没有给您提供与它交朋友的机会,它的使用在某种程度上看起来不愉快。


但是,尽管如此,我还是决定看一下今天可用的东西,而我只看那些只能保证2D的引擎,我并不关心3D支持。 其中的一种引擎Lightweight Java Game Library 3的名称为Lightweight 。 具有讽刺意味的是,主页上最简单的基本示例(几个屏幕长)被吓跑了。


是的, Java当然非常冗长,您想要的就是您所说的。 但是我知道您可以在上面写非常紧凑和非常有表现力的东西。 我看到了一个漂亮而紧凑的API。
最后,选择权落在了FXGL 。 起初,我没有任何热情和激动,这是在开发一些有趣的东西或库之前发生的。 但是从第一个示例以及文档和示例的简短页面开始,此引擎就使我越来越感到惊喜。 在他提出的方法和API中,一切都是合理的,可理解的和一致的。 它绝对可以帮助您为游戏,处理程序逻辑, HUDAI ,碰撞和其他元素构建清晰灵活的循环。


有趣的时刻和FXGL芯片:


  • 顾名思义,对于可视部分,引擎使用JavaFX API( JavaFX被用作图形框架)及其所有用于渲染和布局的功能和反功能。 总的来说,我认为这是一个很好的决定。 因此,作者避免了许多问题(无需实现和维护渲染组件,可以使用Java生态系统中的改进解决方案)。 这是作者本人在他的第一批教程中所说的,我真的很喜欢这个短语:


    “对于大多数UI对象,我们只需要使用JavaFX对象,因为不需要重新发明轮子。”

    但是,总的来说,当然,您当然也有JavaFX许多功能和缺点(我对这些细节不是很了解),但是据我所知,在您的项目中使用JavaFX有一些许可限制,而且看来JavaFX只能在JDK有限交付中使用( Oracle ,也许更多)。


  • 我从存储库开始倾斜了一个测试项目,在此基础上我开始对游戏进行雕刻,在每次游戏开始后,请将其放入logs/项目logs/ 。 这非常方便,您可以立即查看开箱即用的调试信息,对于诊断,了解突然发现引擎研究中遇到的麻烦时的理解非常有用。


  • 同样(显然,使用基本设置),游戏也会通过按Esc提供一个弹出菜单。 这也是一个不错的奖励,我希望它是自定义的,或者至少已被代码或配置禁用。


  • Debag终于在这里工作 ! 终于! 至少可以说,在Love2D中不方便Love2D愉快。


    开发日志


    以下是对我的进步的简要总结,在此我简短地指出了30分钟的间隔后所取得的成就,以及我的一些想法和评论。 看这四个小时我的意识日志!



不行时间留言
1个30m学习了一些教程。 基本API和游戏循环结构。 了解了如何绘制精灵,移动对象,显示和更新HUD。 开始在游戏中加入碰撞。
21小时有一个带有碰撞主体的跳箱(Bounding Box),并且“可以从地板上推下”(即,屏幕下边框的定义)
31h 30m奠定了平台工厂的基础(PlatformFactory.java)。 似乎甚至有可能“驯服碰撞”并设法从平台上击退角色。 毫无疑问,这对于新引擎来说是成功的,并且已经阅读了一半的GitHubWiki教程。
42小时最终确定了与平台的冲突,但仍然存在问题,并不完善。 很快,我设法用相机进行了跟踪,虽然它又有点锐利和笨拙,但是抛光平滑度仍然超出了基准范围,尤其是FXGL的使用体验。 而且,添加平台生成工厂的代码并不难,因此可以在距上次生成的平台可接受的随机距离处生成平台。 并且随着玩家的前进而生成它们的代码也被集成到了主游戏周期中。 就我而言,进展不错。
52h 30m那好 至此,几乎所有游戏都准备就绪。 所有基本组件均已实现。 甚至用正确的机制将播放器推离平台(哇!),并使用文件进行了最终确定,这在前两个引擎中均无法完美实现。 我不认为,也许积累的经验和直觉已经影响了这里。 而且,用于计算新平台位置的随机化器有些笨拙,因为以前的参数绝对无法实现,因此导致了Game Over。
63小时Doodle Jump的另一个关键功能已经实现(该功能超出了主要任务的范围)-如果玩家跳过关卡的左边缘或右边缘,则他会在保持速度(冲动)的同时出现在另一侧。 此游戏玩法是Doodle Jump的非常关键的组成部分; 是什么让游戏变得多样化和吸引人。 此外,游戏重置功能迅速汇总,敌人和敌人AI的代码汇总。 到目前为止,这不在游戏中,而是在原型级别。
73h 30m实现了一种在该级别随机生成敌人的算法。 它根本不是完美的,但是已经为玩家增加了乐趣和挑战。 AI , — - , , . .
84h. — . , . , , Space .

GIF- , .


隐藏文字

0-1h
* 0-1小时*
1h-1h 30m
* 1h-1h 30m *
2h 30m(实际上,游戏的所有基本元素都在这里实现)
2h 30m
3h 30m
3h 30m
4h
* 4小时*


"" … , , , ? .


Benchmark Score: 8


, ,


:


(0 — , 1 — , 2 —(0 — , 1 — , , 2 —Benchmark Score
DefoldLua01个5/8166
Love2DLua1个1个7.5/8701
FXGLJava028582

, , , ( ). , , Java FXGL , , Lua , . , , .


:


  1. FXGL ? . Love2D , Defold , , , , Love2D - , .
  2. , . , . (, ), . , - . , , , , . , , , . .
  3. gif-, . . , , "" , .

?


, - , ?


因此:


  1. , . , , , , . - , - ( Love2D ).
  2. - , Love2D , . F to pay respect .
  3. . , , , - - , , (, , )
  4. . 4 , . - Game Jam , .
  5. ! , , - Roadmap , , . (!) (?) . 30 . , . , , ! , pet- 44 - Ludum Dare .

Source: https://habr.com/ru/post/zh-CN449390/


All Articles