18910140161

文字游戏引擎 ink 初探(上):初步了解

顺晟科技

2021-06-16 10:37:30

300

墨迹是inkle发明的标记性语言,专门用于写互动叙事游戏,是制作文字游戏和游戏叙事的利器。有比较知名的用水墨语言叙事的游戏,比如《80 天(80 Days)》。

以下是一些基于墨迹开发的游戏:

墨水文件是一个普通的文本,看似是各种特殊标记的小说,但小说有很多分支,要用一定的逻辑来控制。看似比较简单,但真正研究起来还是很复杂的。今天,为了向大家介绍的目的,我们简单了解一下。这篇文章可能会向您展示它的基本用法,下一篇文章将把它放在Unity中运行。

除了墨水,inkle还开发了免费的Inky IDE和Unity插件供开发者使用。

漆黑的

Inky是编辑墨迹语言的编辑器。虽然墨迹可以被各种文字编辑器编辑,但是我推荐Inky。它集成了很多功能,我们可以在Inky中自由编写游戏叙事代码,可以随时测试调试。同时,Inky还可以做各种输出,比如JSON、HTML格式等,这样制作出来的内容就可以很方便的用在其他地方。我们今天所做的是在印基完成的。

Inky的界面

漆黑的

去下载吧

一些基本内容

内容(内容)

最基本的内容是最直接的文字,比如:

你好,世界!

您好!

选择(选择)

选择的用法也很简单,只需在选项前加*即可:

你喜欢苹果还是橘子?

*苹果

当然是苹果

*橘子

那一定是一个橘子

运行它,你会看到一个对话,然后下面有两个选项。选择其中一个,程序就完成了。

为了便于理解,我们会在问题前用数字标注,选择用。以下是选择过程:

你喜欢苹果还是橘子?

1:苹果

2:个橘子

一个

苹果

当然是苹果

在每一个选择下,你都可以继续拥有选择,并扩展选择。缩进和多个*符号代表层次结构,如下所示:

你喜欢苹果还是橘子?

*【苹果!]当然是苹果

你想要大的还是小的?

* *大

很好。红色还是绿色?

* * *红色

* * *绿色

* *小

*橘子!

那一定是一个橘子

请注意,我们使用了一对方括号[],这意味着在显示对话框时,只显示括号前和括号内的内容,而在选择后显示对话框时,括号内的内容被忽略。实际操作是这样的:

你喜欢苹果还是橘子?

1:苹果!

2:个橘子!

一个

当然是苹果

你想要大的还是小的?

1:大号

2:小

一个

很好。红色还是绿色?

1:红色

2:绿色

2

绿色的

这种嵌套方式比较直观,但是当内容较多或者分支比较复杂的时候,还是不够的。所以还有一个重要的功能叫做:结。

节点(结)

节点是一整段文字,可以被其他内容引用或跳转。

我们之前做的是一个没有节点的例子,由主进程依次执行。如果使用节点,它们将在正常执行期间被跳过。

节点的使用也非常简单:

===水果===

你喜欢苹果还是橘子?

*[苹果]当然是苹果

-完成

*橘子

那一定是一个橘子

-完成

您可以使用两个===来创建一个节点。请注意,新添加的-DONE代表这个分支的结束,也可以使用-END,代表整个对话的结束。

跳跃

使用-命令,后跟节点名,跳转到指定的节点执行。

运行,你会发现没有显示,因为需要调用节点,也就是使用下面的jumps语句:

水果

现在整个事情看起来是这样的:

水果

===水果===

你喜欢苹果还是橘子?

*[苹果]当然是苹果

-完成

*橘子

那一定是一个橘子

-完成

上面这个能跑,和之前的尝试是一致的。

当需要处理会话分支时,使用节点是一个很好的做法,它的使用也很简单。例如,在上面的例子中,我们可能想要返回并重新选择,所以此时使用节点是合适的。

知道了这些特点,基本上就可以做一些简单的对话了。当然墨水的语法很多,也很复杂。如果你想完全使用它强大的功能,你还需要了解很多。我们来做一个比较复杂的练习,会涉及到比较基础的内容。

让我们试一试

好了,现在用我们所学的做一个更复杂的练习。假设我们的队伍现在站在一个地牢的入口,可能需要做出是进入地牢还是回镇上补给的选择。以下是基本代码:

-城镇

===城镇===

你正站在城镇的门口

*去地牢[],我们走!

地牢

===地牢===

你在地牢门口

*进地牢

-进入地牢

*返回城镇

-返回城镇确认

===return_to_town_confirm===

你确定要回镇上吗?

*是的。

表示“受到某种对待的人”:dividend | reverend

*没有

地牢

===enter _地下城===

你进入地牢,开始探索

表示“受到某种对待的人”:dividend | reverend

这段代码基本上实现了这个过程:

但请注意,以上段落不是最终代码。首先,在我们确认“回城”之后,就结束了,还有一些其他的问题可以跑去看:

你正站在城镇的门口

1:去地牢

一个

去地牢,我们走!

你在地牢门口

1:进入地牢

2:回城

2

回到镇上

你确定要回镇上吗?

1:是

2:不

2

你在地牢门口

1:进入地牢

当我们准备第二次进入地牢时,我们会发现“返回城镇”的选项消失了。

这是因为,对于记叙文,已经选择过一次的选项不应该再出现,所以系统默认隐藏已访问的选项。但这不是我们想要的。我们希望这两个选项一直存在。那么我们该怎么办呢?墨水提供了一个可以一直使用的选项。它有*的功能,但会一直显示。

修改后的代码如下:

-城镇

===城镇===

你正站在城镇的门口

去地牢[],我们走!

地牢

===地牢===

你在地牢门口

*进地牢

-进入地牢

回到镇上

-返回城镇确认

===return_to_town_confirm===

你确定要回镇上吗?

-城镇

地牢

===enter _地下城===

你进入地牢,开始探索

表示“受到某种对待的人”:dividend | reverend

这是一个可以循环运行的过程。你可以试着运行它。

完成:再添加一些材料

现在我们可以在城镇和地下城之间“自由行走”。在我们完成这篇文章之前,让我们试着添加一些材料,了解更多关于变量的知识。

我们要做的是:

添加玩家/团队名称

限制犹豫的次数。如果你多次返回城镇,你将被迫去地牢!

全局变量(全局变量)

在墨迹中,我们可以很容易的使用VAR关键字定义全局变量,使用的方法是{}。

让我们试着定义两个变量:

VAR player_name='PLAYER '

风险值试用=0

其中player_name是玩家的名字,我们给一个默认值,try _ outs是尝试的次数。我们可以在每次确认是否回城的时候加1(用~表示操作),这样如果回城超过两次,玩家就被迫进入地牢。

修改后的完整代码如下:

VAR player_name='PLAYER '

风险值试用=0

-城镇

===城镇===

{player_name}站在镇门口

去地牢[],我们走!

地牢

===地牢===

{player_name}到达地牢入口

*进地牢

-进入地牢

回到镇上

-返回城镇确认

===return_to_town_confirm===

你确定要回镇上吗?

~试用(_ t)

{试用3}是

-城镇

{试用3}否

地牢

*{ try_outs=3}不错的尝试[,哼],反正你也得给我下去!

-进入地牢

===enter _地下城===

{player_name}进入地牢并开始探索

表示“受到某种对待的人”:dividend | reverend

退了两次以上,没有选择再退:

.//前面稍微

回到镇上

你确定要回镇上吗?

1:是

2:不

一个

玩家站在城镇的门口

1:去地牢

一个

去地牢,我们走!

玩家到达地牢大门

1:进入地牢

2:回城

2

回到镇上

你确定要回镇上吗?

1:不错的尝试,是吧

一个

不错的尝试。无论如何你都要下去!

玩家进入地牢并开始探索

这样,我们的演示就完成了。实现的方法有很多,但我们只尝试用全局变量来处理。

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航