我知道两次更新之间已经有很长时间了,但是我在写信告诉您,GoldScript项目还没有结束。 离得很远!
在2014年底左右,我有了一个完全不同(基本上完全不相关)的Web应用程序创业的想法,并且在2015年非常忙碌,我将大部分(很少)空闲时间都花在了那个项目上。 随着该应用程序有望在今年第四季度进行Alpha发行,我又花了更多时间在引擎和2016年的第一款游戏上。今年,我继续做同样的工作。 。
- 成为同性恋巫师是美好的一天。
- GameDev Protips:如何设计更多沉浸式RPG
- 选择的幻想,认知失调和咖啡因助长了精神错乱的不眠之夜……
- 慢慢来:神奇宝贝和黑暗之魂的花园之路空间
- Jubokko ea Floresta de Sangue – Daniel Miranda –中
实话实说,从代码库中休息会非常有用。 我能够以崭新的眼光和更有经验的视角来查看自己做出的决定和实现的结构。 真正令人鼓舞的是,即使经过了很长的时间,我对项目的信念和热情仍然一如既往。
回到引擎之后,我意识到在代码方面,一切都很好,但是它需要进行大量的重构才能真正使事情变得足够强大,从而继续前进。 所以我屈服了,开始完善代码。 我的意思是说真的。 结果,我的更改登录在最近一次更新之间,而现在已变成巨大。 我所做的这项工作旨在使代码更简洁,更结构化,从而使向引擎添加新功能的效率更高,因此绝对值得。
我将更改分为两类, 功能和代码 。 功能是非程序员最想知道的功能,因此我将首先介绍这些功能。 请记住,这些功能都与战斗有关,这是我计划开发的三种主要模式中的第一种。
特征
人工智能
单位AI管理器和行为引擎的基础工作已完成。 这意味着我有一个基本框架,使我能够构建不同的行为模式。 单元可以具有预设的行为,并且可以根据情况的变化随时进行更改。
因此,一个单位可能具有固定的行为“终结者”(摧毁最弱的可及敌人),但是如果他们的队友的生命值低于一定HP,并且他们具有治疗项目或能力,则他们可以在此回合中改变其行为“救主”(医治受伤的朋友)。 这只是一个简单的示例,但说明了我现在在构建具有智能范围的单元行为时必须具有的灵活性。
队伍
现在可以将地图上的单位分成不同的团队。 目前对球队数量没有限制。 从技术上讲,可能会有4支队伍之间或任何其他人之间发生争斗,这对于与常规公式不同的遭遇产生了非常酷的影响。 这也为网络播放或PvP带来了一些非常有趣的可能性。
地图
我已经确认了战斗等级/地图建立过程的有效性。 这导致我从引擎中完全删除了纹理映射,因为第三方工具可以更好地处理此功能。 花时间重新发明轮子完全没有任何意义,而我的时间可以花在其他事情上。
以下是有关流程工作方式的简短介绍:
磁贴编辑器
这是原始地图的示例。 这是在引擎的工具集中构建的。 目前,基本材料只是3D块。 阴影投射在引擎中:

质感的
这是将关卡从引擎中导出,加载到Blender中,进行纹理处理,从Blender中导出为单个网格,然后重新导入到引擎中之后的外观(是的,阴影消失了,这是一个错误)此刻,与材料有关):
新流程涉及到我在引擎中创建所谓的“基础图块”,在其中可以向它们应用元数据(深度,地形,陷阱,宝藏等)并修改其顶点。 然后,我将这些磁贴导出为Blender可以加载的文件类型。 我对3D图形纹理一无所知,但是在一点帮助和观看一些教程的情况下,我能够完成一些工作,作为概念的快速证明。
为了测试这一点,我迁移了在引擎v0.0.4
中创建的Dark Orbonne Monastery地图(我现在在v0.0.13
)。 自定义以来,定义级别的数据有些变化,这需要一些工作。 为了使此工作有效,我编写了一个简单的地图迁移器工具以弃用/传播地图属性,然后将其重新加载到当前版本中。 它就像一个魅力!
深度

现在,图块可以具有depth属性,这将导致单位向其“下沉”一点。 对于水或熔岩等地形类型非常有用。
相机

相机很难。 这是我在整个项目中不断学到的东西。 我要非常感谢我的好朋友Manthrax,他在这里为我提供了很多帮助,使我的相机代码得以实现。
所以! 相机现在具有一种内置的AI。 这意味着摄像机将自动定位并旋转以确保当前战斗单元不会被玩家遮挡。 这比我想象的要难得多,但是结果现在运行得很好,也许有点太好了!
现在,每个图块都有一个在地图加载时为其计算的摄像机象限。 单个象限意味着摄像机非常频繁地自动旋转,可能会稍微偏离方向,因此也许可以接受一个更好的象限列表。 然后,如果照相机已经在其中之一中,则可以保持原状。
无论如何,一旦我实现了AI和战斗UI的头几步,这立即是必不可少的。
用户界面
径向菜单

是的,是的,我已经通过实现战斗动作的径向菜单迈出了向战斗界面迈出的第一步。 我对此很满意。 它绝不是为了完成而设计的,但是它运作良好。
但是,这引起了有关屏幕分辨率和自适应用户界面的一些问题。 作为Web开发人员,在前端,我所做的一切几乎总是100%响应的。 优秀的Web应用程序必须在各种设备上提供一致的用户体验,每种设备都有自己的屏幕尺寸和分辨率。 对于游戏当然也是如此,但是直到我尝试制作一款游戏时,我才真正想到过它!
现在,我也希望能够在引擎中提供这种用户体验,因此我需要想出办法。 我现在不确定CSS媒体查询的典型Web解决方案是否足够(但也许可以)。 径向菜单的铃声大小及其图标将需要适应播放器的屏幕分辨率,以使其保持一致并且不会影响播放器的使用体验。
反馈
当单位将效果投射到其他单位上时,玩家需要知道该转换的结果是什么。 在引擎中,这称为战斗反馈。
当前有四种类型的反馈:
- 信息 -用于通知玩家一些常规情况,例如击中失败
- 伤害 -告知玩家因施法而造成的伤害
- Buff —用于通知玩家已应用的buff
- 减益 -告知玩家已应用的减益
现在我只获得前两个的动画和样式,但是添加更多内容并不需要很多工作。
声音
声音已经实现,引擎中的任何东西现在都可以触发声音播放了,战斗关卡可以设置一个BGM设置,在加载关卡时可以播放。 我什至制作了一些音效,并载入了我为Dark Orbonne Monastery技术演示编写的曲目。
动作
以前,我只完成了Move和Wait操作,但现在Cast也已经完成。 强制转换是一个单位基本上可以对另一个单位执行的所有动作所使用的动作,因此攻击,强制施法或使用物品-这些都是强制转换。 Cast操作在很大程度上取决于我基于诺言的动画类,我将在代码更改部分中详细介绍。
运动

在以前的视频中,您可能已经看到了一些笨拙的跳跃动画,而这些都是以一种怪诞的方式完成的。 现在,我已经实现了用于跳跃,跳跃和下落的适当动画,其阴影与单位移动的表面完全匹配。 再次非常感谢Manthrax在整合线性插值方面的帮助,以使机芯工作更顺畅!
工具集
您可能会从屏幕上注意到,我完全重新设计了工具集界面。 新设计看起来更像是带有文件菜单和工具栏的传统桌面应用程序,就像其他编辑程序一样,它还为我提供了更多的屏幕空间来查看正在发生的情况。 这可通过可拖动的对话框来辅助,该对话框非常有用,尤其是在处理等距世界时。
视网膜
该引擎现在支持视网膜显示。 这是一件很容易实现的事情,因为Three支持它作为WebGLRenderer
类的一个属性,但是还是很酷的。
码
好吧,你准备好了吗? 现在进行代码更新,充满了JavaScript书呆子的说话,您已经被警告!
ES6 / ES2015
整个应用程序已完全重构为使用ES6 / ES2015语言标准。 通过强大的工具(例如Webpack和Babel)可以做到这一点。
这意味着代码样式已更新为现代标准,并且所有棉绒现在都通过ESLint处理。
哦,现在一切也都基于模块!
React +创建React应用
所有基于DOM的2D UI现在都可以通过React完成。 与以前使用的工具(Handlebars)相比,有了很大的改进。 有很多很棒的组件可以利用,而且由于我个人很喜欢React,因此在此项目中使用它非常好。
我还使用create-react-app
作为样板来处理所有Webpack配置。
将游戏代码与引擎代码分离
GoldScript引擎是以模块化方式设计的。 可以将其视为可以在其上安装软件的操作系统。 在这种情况下,引擎是操作系统,游戏是软件。
我的游戏程序包是一个单独的存储库,并通过npm
拉入引擎。
那么,如何将它们分开呢? 基本上,游戏定义了战斗规则,战斗效果,单位统计等内容。 引擎不关心这些。 它只是简单地运行从游戏中接收到的公式,以找出效果转换的结果。 游戏包还包含引擎运行游戏所需的所有静态资产(艺术,关卡数据,声音等)。
这使我能够清晰地分离出不同种类的逻辑,并且基本上意味着为引擎制作不同的游戏应该很容易。 只需创建一个新的游戏包,然后将其导入引擎,只要游戏具有所有必需的方法,它就可以运行。
环境
现在,通过我的NWJS自定义命令行界面包Northwest处理引擎的开发环境。
该工具使我可以运行NWJS的最新版本,并为我提供发布用于Windows,Mac和Linux的引擎/游戏的命令。
州
我写了我自己的有限状态机,现在基本上运行了整个引擎。 每台机器也是更多机器的容器,这基本上是一种递归模式。
这使我可以完全控制引擎可能处于的每个可能状态之间的用户输入操作。
动画
游戏中的所有动画现在都通过Promises处理。 这给了我一个很棒的,可读性强的API,可用于在序列化动画时进行操作。
我的动画类还处理基于帧的动画,这非常适合精灵表。
三个r69至r86!
这是巨大的。 对于使用三者的任何人,您都会知道这是一个非常实验性的框架。 重大变化一直在发生。
我向前跳了将近20个版本。 我知道,疯狂吧?
这还不算太糟糕……很好。 但是我通过了它,并在此过程中学到了很多东西。
总的来说,大概花了我一个月的兼职编码才能移植所有内容。
这是值得的。 最新版本使我可以使用各种很酷的新功能和改进功能,所以我很高兴自己能做到这一点。
包起来
我希望您喜欢这个更新……正在制作3年? 叹。
我将尝试更多地写博客……但是问题是这需要时间,这是我目前最宝贵的资源。 仅这个博客就花了我相当多的时间来编写和整理。 我确实知道这很重要,所以我会尽力争取时间。
到目前为止,这是一个疯狂的旅程,但是我仍然有很多乐趣,所以我还没有放弃!
下一步将解决我对自适应UI的关注,如果没有针对此问题的可靠解决方案,我不想走得太远。
直到下一次!