Defold还有什么和它一起吃?

图片

这是Defold游戏引擎的一个小例子,使用一个实际示例(在Andoid下),以及一些主观的批评和赞赏,以及一般性评论。 谁愿意在意有关此引擎的更多信息,只有一次采访可以阅读 。 网络上有关Defold的信息很少,因此这将有助于建立一个很小的存钱罐。

前戏


因此,Defold是一个相对年轻(自2011年起)的跨平台引擎,其视觉编辑器类似于Gobot,Construct或Cocos Creater。 它主要用于2D(仍然没有足够的工具可用于3D),编程语言是Lua。 它与类似的引擎不同,其在移动设备上的性能稳定(即使是60 fps,也没有声音滞后),小巧的体积(2-4 mb,取决于平台),便捷的gui and go系统,出色的动画设置(关键曲线)以及完全从属的功能编辑器(下面我会告诉您)。 在该帐户下的站点上,可以存储项目文件。 任何授权的团队成员都可以对项目进行更改,这通常很方便,尽管我本人不能总是使用它,因为 我们的有效代理不会授予编辑者访问权限。 Defold具有编写代码的功能,尽管我会尽量减少(以下详细信息)。 是的,我几乎忘记了,Defold团队反应迅速,值得尊重。 我几次在论坛上寻求帮助-他们立即在10分钟内回答并提供了帮助。 一旦在Ubuntu上启动编辑器时出现问题,这些家伙起初就束手无策,但是几个小时后,他们的负责人联系了我并解决了问题。 事实证明,在Linux上,视频中存在标准柴火的错误,因此您需要安装本地火柴。 网站上也有资产,没有资产。 好吧,让我们结束序幕,走吧!

让我们开始吧!


我们在网站上注册并下载Defold版本2编辑器(不再支持1),在那里创建您自己的项目并下载。 然后将项目存储在站点或本地(如果我们担心狡猾的Defold会偷窥)。 接下来,通过编辑器打开您的项目(图片中会有我的名字),看起来:



左边是文件,右边是所选节点的内部,中间是编辑器。 我不会打扰您界面的分析,您可以自己研究它。 看到内建文件夹? 您可以学习该引擎的一组标准脚本,字体和其他内容。 其他所有内容都是您自己的文件。 在项目设置(中间的图片)中,Main集合的一行(突出显示),有一个指向主集合文件的链接,您的应用程序从该文件启动,打开它:



是的,是的,这正是您在编辑器中遇到的混乱,因为无法隐藏不必要的内容(我们会以负数来表示)。 首先让我们了解什么是集合。 当我在上面写有关下级编辑器的文章时,我们了解到每个项目文件(无论其扩展名是什么)都是文本文件,可以独立编辑。 因此,集合也是带有内部对象描述的文本文件。



集合可以包含任何对象(脚本,子画面,声音等),以及嵌入其中的其他集合。 执行期间将创建其所有内容,并初始化脚本。 集合可以包装在代理中。 代理是一件好事,例如,它们通常包装游戏的不同层次。 它们可以被运送,装载(在装载过程中创建一个嵌套集合),暂停,减慢和加速过程。

另外,非常方便的事情-工厂和收集工厂。 如果您需要在执行过程中动态创建和删除对象,则这些对象是必不可少的。



这是动态集合的一个很好的例子。 这是一个峰值,它在级别上加载有随机算法,然后被删除,这使他退出相机视图,以免浪费资源。



这是尖峰脚本,它使用update方法检查自己的位置是否小于角色的位置(玩家在相机中央)加上少量空白,然后将其删除。 顺便说一句,您可以在脚本上挂起属性。 例如,我有一个工厂收集对象,其中有一个npc绵羊。



这是我们的NPC,它在脚本中具有跑步速度,步幅,跳跃强度和耐力等属性。 创建实例时,我将这些属性随机分配给它。

创建npc:



脚本的内部实例更改其属性(通过self的唯一性):



现在我们的羔羊以不同的速度运转:



说到代码编辑器,它是原始的。 方法不能被最小化(例如,在Sublime中),并且当有很多行时,您必须转动轮子很长很痛苦的时间,寻找合适的方法。 规模也没有增加,但这些都是小事。 折叠资产从编辑器中获得有关如何教Sublime填充方法的说明。

至于粒子,这很方便-如果在编辑器窗口中选择一个发射器并按空格键,则可以立即看到结果。

好了,现在有关引擎的工作原理


Defold接受两个单独的分支进行渲染,分别是GUI和GO。

GUI-顾名思义,这是一个用户界面。 它是单独存在的,在屏幕上配置,并且始终呈现在其他所有内容之上。 GUI具有与GO无关的自己的方法,尽管与之相似。 这也是一个集合,但有局限性。 每个GUI都接受一个脚本,扩展名为.gui_script。 尽管存在细微差别,但它是一件非常方便且方便的事情-您不能仅通过全局变量或消息(直接在后面告诉您)直接从GUI访问任何游戏对象。

GO是游戏对象(类似于转换节点),包含有关移动,旋转,缩放等的信息。 在内部,它需要一切,包括其他GO。 用于集合,这是任意数量的对象(如组)必需的外壳。

接下来,乐趣开始了。 我从一个具有Libgdx的友好的Android Studio移到Defold,这让我感到震惊:不能直接访问对象,只能通过拐杖方法或仍然无法赋予创作自由的消息来访问,但存在严重的局限性。 如果与同一个Libgdx进行比较,我什至可以平静地从Lieb库中重写现有类并已经引用它。 De,在Defold中,您可以使用现有的东西,如果缺少某些东西,请要求开发人员添加必要的功能,或者您正在寻找解决方法。 例如,在处理声音时,您无法确定播放是否结束! 我必须添加一个拐杖来识别播放文件中声音的持续时间。 对于简化的Box2D(突然开始批评),在碰撞之前,之中和之后进行检测和处理的辉煌方法从那里消失了! 相反,一条消息会到达脚本中,该脚本与实体位于同一GO(并非总是每一帧,尤其是在移动帧中),其中包含有关碰撞的信息,仅此而已。 同样,如果物体是物理的,则不能移动它,它只能是运动学的,并且在执行过程中不能更改此属性。 GO无法与实体缩放在一起,在编辑器中它将为您更改缩放比例,但在游戏中不会更改(就像他们答应修复的一样)。 GO不能缩放到负数(例如,用X镜像),所有内容都将在编辑器中完成,但在执行时它将返回到原始状态。 总的来说,我对这个话题有些反感((通过拐杖解决了这些问题))我平静了下来,但Defold和他的编辑的速度仍然超过了Libgdx(读者会原谅我的主观性!)而且缺乏一名普通的编辑(我记得以某种方式使Lieb成功了) Autodesk Maya中的地图编辑器,但这是另一个故事...)。

msg.post()方法以及如何与之关联


通常,每个对象都有一个URL(例如,“ main:/ main_pers#spine_anim”),您可以通过该URL发送消息,甚至可以将变量附加到该URL。 消息直接飞向收件人,而无需排队等待处理。 它既方便又有时会造成混乱。 为了将信息从GO发送到GUI,通常需要消息(例如,您的羊被水果泡住了,我们会在GUI中更新分数)。



反之亦然(能量已经耗尽,我们通知绵羊该睡觉了。)



当更新方法中的脚本之一中计算出的变量没有时间更新时,会出现问题,因为消息不合逻辑。 但这没什么,最主要的是要习惯它。

另一个细微差别是对象的地址。 从本质上讲,它们是字符串,但是,在移动平台上,字符串被禁用以节省资源(该死的,它被写成!!),而不是哈希。 似乎没什么,是的,但是如果您的游戏逻辑通过编辑的行发送消息,然后等待麻烦,邮政服务将不会将信件交给收件人。 因此,通过msg.url()方法保留变量中的地址,并且不要碰。 实际上,这些都是琐碎的事情,但起初却非常浪费宝贵的时间。 例如,为了找出地面上是否有绵羊,您需要在腿下方添加一个额外的运动机构,并询问他是否有进入地面的入口。

龙骨代替脊椎


没问题,我们使用龙,因为脊柱非常有偿。 但是,一如既往地存在。 脊柱有功能-皮肤,龙没有。 怎么解决? 手。 从书脊打开json,看看有皮肤的地方,分析,复制,从巨龙粘贴到我们的json中,然后进行适当的编辑,仅此而已。 python脚本为您节省了很多钱。 至于剧本,这通常是童话。 由于所有文件都是文本,因此编辑可以自动化。 例如,我在编辑器中使用了具有大量纹理(超过300个)的常规地图集来收集一个关卡,但我并未全部使用,仅使用了约100个。扔出去。 当您可以自动化某些东西时,这非常方便。

分享和Admob


可以在资产中找到“共享”按钮,并在几分钟后将其附加。 小心资产! 例如,Asset Admob大大降低了构建速度,并且在没有网络连接时也完全不提供资产。 对于Admob(我不会写它的嵌入方法,所有内容都在github上的文档中),您仍然必须在平台上进行检查,否则Windows上的构建会出错。 因此,在开发时,请尽量推迟广告和其他资产的最后使用时间,因为 没有它们的Defold构建非常快。 至于本地化,您可以创建自己的字典:

dict["ru"]["lang"]=" " dict["en"]["lang"]="Ya ne russkiy" 

并在初始化期间更改文本,如下所示:

  language=sys.get_sys_info().language label.set_text("game:/go#label",dict[language]["lang"] 

根据结果​​,这基本上就是全部,Defold非常酷(当我知道时),因此我建议所有人。 谁在乎我的收获,在这里观看预告片 (不是PR,我的目标受众是孩子)。

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


All Articles