指南:技巧
这是一个技巧合集,从操作指南到最佳实践。
任意长度的返回
警告:无论出于何种原因,导航回之前的段落都可能存在问题。系统无法事先知道重新执行段落内容是否安全。即使它知道这一点,也无法知道哪些操作可能会或不会产生副作用——例如,修改变量。因此,如果你允许玩家返回到段落,那么你应该要么:确保段落不包含有副作用的代码,要么将该代码包裹在某些东西中以防止重新执行——例如,
<<if visited() is 1>>副作用<</if>>。
注意:导航到段落以创建菜单、背包等的一个替代方案是使用 Dialog API。
当你处于这样一种情况:你使用一组段落作为某种菜单/背包等,并且玩家可能与其中几个段落交互,甚至只是同一个段落多次交互,那么将他们返回到进入菜单之前所在的段落可能会有问题,因为他们可能与该起始段落相隔好几个段落——因此,<<return>> 宏和 [[Return|previous()]] 这样的链接构造将无法工作。
解决这种任意长度返回问题的最常见方法是使用一点 JavaScript 将玩家访问的最后一个非菜单段落记录到一个故事变量中,然后用它创建一个链接。
例如,你可以使用以下示例中的一个——它们做同样的事情——将最后一个非菜单段落记录到 $return 故事变量中。
通过 JavaScript(Twine 2:故事 JavaScript;Twine 1/Twee:一个 script 标签段落)
$(document).on(':passagestart', function (ev) {
if (!ev.passage.tags.includes('noreturn')) {
State.variables.return = ev.passage.name;
}
});通过宏(最好在 PassageReady 特殊段落中使用)
<<if not tags().includes("noreturn")>>
<<set $return to passage()>>
<</if>>你需要给每一个菜单段落都打上 noreturn 标签——你可以使用任何你想要的标签(例如,menu、inventory),只需确保如果你决定使用另一个,就在代码中更改名称。
在你的菜单段落中,你的长返回链接将简单地引用 $return 故事变量,如下所示:
→ 使用链接标记
[[Return|$return]]
→ 使用 `<<link>>` 宏(分离参数形式)
<<link "Return" $return>><</link>>警告(Twine 2):由于 Twine 2 自动段落创建功能当前的工作方式,使用链接标记形式会导致创建一个名为
$return的段落,该段落需要被删除。为避免此问题,建议你在 Twine 2 中使用<<link>>宏的分离参数形式——如上所示。