奴隶制五年

您是否考虑过自己的游戏? 那您自己的多人游戏呢? 我认为是! 你们中的许多人都希望坚持自己的杰作的发展,将多方面的想象力和卓越的完美主义融合在一起。 我了解您,并想讲述这种迷人方式的故事。




背景知识


一切始于2007年,当时出现了基于谢尔盖·卢亚扬年科(Sergey Lukyanenko)的作品的在线j2me游戏。 我还没有电脑,手机上的这款游戏给我留下了深刻的印象,其中最令人震惊的是开放世界。 我参与进来,尽管没有任何教程,但很快就知道发生了什么。


时间过去了,但是兴趣并没有消失,仅仅一场比赛已经不够了。 渴望了解其工作原理以及随机性促使人们在随后的禁令中使用错误。 进一步的毕业和专业“程序员”的选择推动了我开发第一个在线盈利软件的动力。


一旦我在OOP领域的知识得到加强,我们就已经决定与我的玩伴和艺术家一起开发我们自己的MMO,这将比以前酷100倍!


我们的游戏是关于什么的?


我们的游戏荣耀了Oseon和Weiland这两个交战派系。 他们每个人都有自己的星球;反过来,它容纳了玩家发展所需的建筑物。



星球大家庭Oseon


派系行星受到12门系统的保护。 占领了所有大门之后,玩家便可以进入敌方星球。 仅仅通过开放的路径传送是不够的,此后,有必要捕获城堡-地球的主要建筑物。 被占领方的士兵发现自己处于困境中,因此其后备部队的参数比自己高1.4倍。


战斗是逐步进行的,有人将它们与“英雄”中的类似游戏进行比较,另一些人则将其称为国际象棋。 在某种程度上,它们没事,这里有充满魔法的部队,您将不得不思考前进的几步。



与敌人作战


但是,PvP游戏的残酷世界还有其他有趣的机制,从丰富的存款的通常开发开始,到寻宝游戏结束。


样机


由于我们没有制作MMO游戏的经验,因此我们决定承担所有不利的事情。 我们的产品包括:Anthill,Netty,MySQL。 这些不完全是那些技术。 经过大量工作后,我们遇到了一系列问题:缺少界面编辑器,移动时地图的微日志,文本输入等等。 在全屏模式下,游戏看起来令人作呕。



游戏的原型。 矿山开发


在某些情况下,切换游戏状态时,引擎上的虚拟摄像头开始表现异常。



游戏的原型。 滞后


经过一年的开发,再也无法撤退了,我们仍然完成了游戏的基本机制,组装了地图编辑器,并决定该在公开场合进行测试了。
我们将游戏添加到了VK(无目录)中,并宣布在我们的团队中推出该游戏,该团队大约有100人。
这时,游戏的键盘控制令人费解,有很多错误,而且地图太简单了,只有两层(草皮和树木)。 在VK中玩了三天后,只有15个人注册了-人们不知道如何玩。 我们决定从头开始重做所有操作。


旧版本的屏幕截图

很棒的在线



玩家互动菜单



打架


莱希,不是那样,先来吧!


可能很多面对失败的人认为这不是他们的,因为已经花费了很多时间,但是没有明显的结果。 但是,当您走了这么长的路要走时,放弃是愚蠢的。 几个月后,我们根据现有经验决定再次参与游戏。


我们决定绝对通过视频卡制作带有渲染图形的客户端新版本。 在许多框架中,Starling似乎是最吸引人的,它具有带有标准Flash的类似API,受Adobe支持,并且可以不费吹灰之力使用现有图形。 最终,新版本运行顺利。
为了动态地矢量化栅格,我使用了Dynamic TextureAtlas Generator 。 但是在随后的资料库中,几乎完全必须重写并放弃地图集,该动画占用了大量空间,无法放入允许大小的地图集中。


卡片


在弄清楚客户端上的技术之后,我们决定处理服务器卡。 每个星球都可以包含一个或多个位置,在这些位置之间可以左右移动。 对于每个位置,都会创建一张地图,最初由两层组成。 后来,我们决定添加另一层,然后再添加另一层,结果确定为四个:


  • 草/地面
  • 石头\水;
  • 笼子大小的装饰品;
  • 大风景。

想法是将前三层绘制在一个位图中,然后发送到视频内存。 当在后台绘制一层而不是三层时,这是一种好方法。 但这并非没有问题:将MovieClipa切换到下一帧进行栅格化时,应绘制所有先前的帧。 在该位置的入口处,游戏被冻结了,因此决定提前将所有图块传输到BitmapData并进行快速复制像素。 但是同时,在光栅化大量帧时,在游戏开始时获得了令人不快的fr。 您可能已经看到某些浏览器在启动时在加载资源时冻结。 我们不希望我们的游戏同样无效,所以我限制了为每帧绘制图块的时间。 在这里,您可以阅读有关如何操作的更多信息。
所有卡的尺寸均为20x16正方形瓦片,大小为64px。 将地图数据以二进制格式写入文件,该文件中的层边界已预先确定,并且仅记录了MovieClip帧号。 因此,映射文件的权重为1280字节。 但是后来,该格式被转换为JSON,以便更轻松地处理数据。


结果,在地图上的工作占据了客户开发的很大一部分。 为了能够创建精美的地图,在Flex上编写了一个编辑器。



地图编辑器


14个星球中的每一个都有自己的动植物,因此您可以从视觉上了解自己所在的星球。



品种


同样,通过编程,我们从上方和下方为卡添加了一半的瓦片,这些瓦片只是复制了相邻的瓦片。 这是针对突出的交互元素(例如菜单按钮)完成的。 在战争的迷雾中,邻近位置的区域被添加到左侧和右侧-这是一个好主意,可以立即解决多个问题。 游戏在全屏模式下看起来更好了。



卡与两侧的战争迷雾


伺服器


在与客户打交道时,我们同时在寻找服务器程序员,但是没有多少人愿意在没有常规文档的情况下编写可疑游戏。 有些人开始写书,但马上就退学了,因为不清楚要写什么,并且钻研游戏逻辑的棘手很无聊。 一段时间后,我们确定需要一位可以用Java设计服务器的专家,如果他将来放弃该项目,我可以添加它。 当地的工匠求解器帮助我们实现了服务器体系结构。 也许有人会说,他使我们走上了正确的道路:他展示了如何制造服务器,并借鉴了Mail.ru培训课程中的体系结构。 求解器也不例外,过了一会儿就离开了我们。 经过一年的努力,我设法编写了所有基本的游戏逻辑。 现在,回头看,我很茫然,为什么我们没有在Akka上编写服务器?


您可以在此处阅读有关体系结构的信息- 以Skyforge为例的在线游戏服务器的体系结构 ;还可以找到有关Intuit的讲座。 当然,在我们的服务器上,不是200万行,但是也很多。 没有使用光纤(如skyforge),我们的服务器极有可能是可读性较差的。 顺便说一句,当一切都已经为我们工作时,用于Skyforge中非拥挤多任务处理的同一根光纤的代码发布得很晚。
当我忙于服务器并在客户端上粘贴逻辑时,美术师完成了丢失的细节,这些细节立即落入客户端。 服务器准备就绪后,我们启动了Alpha测试。 这次几乎一切都应有,但是服务器错误和错误必须修复很长时间。


来回。 自我诞生的游戏机制


我想告诉您游戏中另一个不寻常的事情。 您会如何命名专门组成一支不完整的军队并输给其他玩家/机器人的玩家? 我们称它们为“李子”。 他们合并经验并有意降低他们的水平,因此他们在水平上变得更强。 当可以攻击的玩家水平受到限制并为他们提供更多发展机会时,这一点很重要。 击败高级敌人并获得更多奖励变得越来越容易。 这就像在抽波斯,但方向相反。 尽管它看起来比经典游戏要简单,但经验的流失需要您更多的时间和熟练的入门技能。 如果降低弱角色的等级,那么这不会带来太大的优势,只会将玩家拉到平均水平。 升高和降低水平可以无限长。 即使达到当前最高水平的最大发展水平,玩家也可以上升到更高的水平来使用新技术,并再次从经验中合并自己的进步,同时保持自己的技术水平。


初学者有一个问题,当他们无法对这样的矮人做任何事情时。 我们通过引入限制,将玩家分为两类来解决此问题:您只能在bot上攻击bot,而对其他玩家以及在相同合并的玩家上的最大级别有限制。 因此,他们几乎停止对游戏的平衡施加压力,最重要的是,他们可以继续做自己喜欢的事情。


它没有用,不是fartanulo


我们于2018年2月4日进入VK游戏目录,这不是第一次。 我们的第一个应用程序没有说明就被拒绝,而重新应用程序时,我们仍然被添加到目录中。


尽管游戏开发时间很长,但无法捕获所有细节;我们犯了很多错误。 首先,他们在平台上犯了一个错误:并非每个玩家都准备花很多时间在基于浏览器的2D游戏中,这需要技巧。 许多人已经习惯了简单易懂的游戏,从一开始就拥有更多的乐趣。 温和地说,我们在游戏中的训练失败了。 完成本教程后,玩家可以放心地忘记那里的内容,甚至可能根本不会阅读。
根据VK的统计,我们有大量的玩家,大多数情况下,只有那些曾经玩过旧游戏并且已经熟悉游戏机制的人会留很长时间。


48周后...


在发布Alpha版本约一年后,很明显Flash即将停止在浏览器中运行。 从那一刻起,我决定将客户移植到更顽强的东西上。 当然,最好用熟悉的语言编写,所以我选择了LibGDX。 这个Java框架允许我们不重写逻辑的某些部分,而只是从服务器复制它。 它具有很好的平铺地图抽象和Tiled的实现,这使我们能够快速为地图编写代码。 但是也有一些缺点:字体渲染,缺少实时的可视界面编辑器等。


目前,已为Android编写了一个alpha客户端,该客户端实现了游戏中所有功能的50%。



手机游戏客户端


开发仍在进行中。 如果您希望为移动客户端绘制或编写某些内容,请编写。


我还要感谢音响工程师Peresvet Mukhanov和作曲家Artem Davydov,他们在很短的时间内就编写了所有内容,并且可以在游戏中听到。

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


All Articles