Besiege Guide

【中文指南】關卡編輯器: 高階歸元 for Besiege

【中文指南】關卡編輯器: 高階歸元

Overview

在Besiege裡,「歸元」一詞指的是一種物件的移動方式,當一物件在距離外繞著一軸或一點公轉時即可稱為「歸元」。一般的歸元只能以一個固定的距離來進行歸元,然而隨著Besiege科技的深入發展,能夠以變數距離來歸元的「高階歸元」愈顯重要。若對本文有任何疑問,可以到Besiege官方Discord來找我:Official Besiege Discord[discord.gg](Nice Name#2895)本指南所使用的用詞參考了CCC與Anvil共同翻譯的《圍城》台灣繁體中文語言套件。

「歸元概述」

一般來說,歸元(Orbit Transformation)是指一物件於距離外繞一軸、點公轉。但Besiege並沒有直接的預設邏輯來達成這些動作,這代表我們必須透過多個邏輯的組合來彌補這點。

步驟分為三個:「歸元旋轉還原

歸元

使物件回歸至軸(點)。在這個步驟裡,我們必須先知道使一個物件回歸至軸時的方向及距離,並將兩者以實數的形式輸入「座標變換」。

旋轉

如字義,旋轉物件。

由於歸元是瞬間性的邏輯,因此旋轉角設定的愈大,物件公轉的速度就愈快

還原

根據旋轉後的角度使物件還原至軸原本的距離外。

說的詳細點:旋轉後,它所面對的方向便被改變了,接著再反向操作「歸元」步驟,物件便會被移至原本的軌道上,整體的運動方向就會看似在公轉了。

「高階」的差別

高階歸元(Variable Distance Orbit Transformation),說的簡單點,就是普通歸元中公轉物件與軸心的距離從「定值」變成了「變數」。

1. 變數距離

高階歸元的步驟基本上是跟普通歸元一樣的,但Besiege的預設邏輯無法讓玩家將「座標變換」的值設成變數,所以一般來說一個物件要移動多遠都只能是一個定值。

因此,為了將物件以變數距離來移動,我們需要一套名為SetGet的系統以便玩家瞬間並持續的輸出一個變數。

2. 方向判定

步驟「旋轉」必須在「歸元」及「還原」兩者之間完成,但SetGet是瞬間性的系統,從第一到最後一條邏輯之間是毫無延遲的,這樣一來要手動控制旋轉方向便成了不可能。因此我們必須要在啟動高階歸元前就先輸入好方向,並用一套特殊邏輯來判定在步驟「歸元」結束的瞬間該把物件往哪個方向旋轉。

這個特殊的邏輯暫時叫做Control Unit(直到我想到該怎麼稱呼它), 簡稱CU。CU可以根據預先輸入的值在步驟「歸元」結束的瞬間讀取預先設定好的「旋轉」的方向,並在旋轉後立即接軌「還原」步驟。

操作須知

要操作高階歸元,你必須知道如何輸入變數設定各項數值及如何啟動系統

輸入變數

高階歸元是使用變數距離的歸元,而這個變數必須是使用邏輯事件來增加、減少的:

 變數 “i =1 (或-1)“, VDOT

變數「i」的值代表公轉物件離軸數值上物理上的距離,兩個距離會被同時更動(因為我把它們合併了)

上述輸入會觸發以下邏輯:
(只以正數為示範)

當 變數(區域) “i =1″
 變數 “limit +1”, VDOT
  停用
   變數 “DG1 +1”, VDOT  <──數值上的距離
  啟用
 變數 “C1 +1”, VDOT
 座標變換(區域) “y =1″  <──物理上的距離

啟動

你只需要一條邏輯事件來啟動高階歸元:

變數 “d =1 (或 -1)”, VDOT

這會觸發下列邏輯:
(只以正數為示範)

當 變數(區域) “d =1
  停用
   變數 “CU =1”, “VDOT”
  啟用
 變數 “DG1 +0”, “VDOT”

變數「d」代表「direction(方向)」,範例的值是根據Y軸而定的:1是往右轉、-1是往左轉。方向的數量可以不只兩個,在這只是範例。

設定數值

在這個高階歸元系統中總共需要手動設定兩個區間的數值:「距離輸出」及Control Unit(CU)

  • 距離輸出 

    可以設定「距離輸出」的地方分別在SetGet的兩個記憶區間DGdg,各區間中每個閘的最上層就是讓使用者放置輸出邏輯的地方。

    範例:

    當 變數 “DG1 >0”
     座標變換(區域) “y =-1″  <──這裏就是放置輸出邏輯的位置
      停用
       變數 “dg1 +1”
      啟用
     變數 “DG1 -1”

    這裡所輸出的值就是指在「歸元」及「還原」中所需的變數距離,通常是使用邏輯「座標變換」。且距離輸出並不一定要是「移動」,「旋轉」也是可以的,視所需而異。

  • Control Unit

    Control Unit就像邏輯閘,用來瞬間判定該往哪個觸發事件(event trigger)走。

    在每個CU的觸發事件(註*1)內,最上層就是用來放旋轉邏輯的地方。
    這裡以「CU =1」為示範:

    當 變數(區域) “CU =1”
     座標變換 “y =1°”  <──預設的旋轉邏輯
     變數 “CU =0”, “VDOT”

    旋轉邏輯能是單一的「移動」事件、也能是歸元,因人而異。

    CU觸發事件的數目是根據有多少方向而定,且所有的方向都需要被輸入相應的數值。

    /////
    註*1:雖說是「每個CU的觸發事件」,但”CU =0″不算,不要在這裡放旋轉邏輯,”CU =0″是用來收束CU系統的。
    /////

邏輯總覽

當 變數(區域) “d =1”
  停用
   變數 “CU =1”, VDOT
  啟用
 變數 “DG1 +0”, VDOT

當 變數(區域) “d =-1”
  停用
   變數 “CU =-1”, VDOT
  啟用
 變數 “DG1 +0”, VDOT

方向設定區
當 變數(區域) “i =1”
 變數 “limit +1”, VDOT
  停用
   變數 “DG1 +1”, VDOT
  啟用
 變數 “C1 +1”, VDOT
 座標變換 “y =1”, VDOT

當 變數(區域) “i =-1”
 變數 “limit -1”, VDOT
  停用
   變數 “DG1 -1”, VDOT
  啟用
 變數 “C1 -1”, VDOT
 座標變換 “y =-1”, VDOT

輸入區
當 變數(區域) “C1 >37”
  停用
   變數 “DG2 +1”, VDOT
   變數 “DG1 -37”, VDOT
  啟用
 變數 “C1 -37”, VDOT
  
當 變數(區域) “C1 <-37”
  停用
   變數 “DG2 -1”, VDOT
   變數 “DG1 +37”, VDOT
  啟用
 變數 “C1 +37”, VDOT
進位區
當 變數(區域) “limit >1406”
 變數 “i -1”, VDOT

當 變數(區域) “limit <-1406”
 變數 “i +1”, VDOT

限制器
當 變數(區域) “DG1 >0”
 座標變換(區域) “y =1”
  停用
   變數 “dg1 +1”, VDOT
  啟用
 變數 “DG1 -1”, VDOT
  
當 變數(區域) “DG1 <0”
 座標變換(區域) “y =-1”
  停用
   變數 “dg1 -1”, VDOT
  啟用
 變數 “DG1 +1”, VDOT

當 變數(區域) “DG1 =0”
 變數 “DG2 +0”, VDOT
  
當 變數(區域) “DG2 >0”
 座標變換(區域) “y =37”
  停用
   變數 “dg2 +1”, VDOT
  啟用
 變數 “DG2 -1”, VDOT
  
當 變數(區域) “DG2 <0”
 座標變換(區域) “y =-37”
  停用
   變數 “dg2 -1”, VDOT
  啟用
 變數 “DG2 +1”, VDOT
  
當 變數(區域) “DG2 =0”
 變數 “CU +0”, VDOT

歸元區
當 變數(區域) “CU =1”
 座標變換(區域) “y =1°”
 變數 “CU =0”, VDOT

當 變數(區域) “CU =-1”
 座標變換(區域) “y =-1°”
 變數 “CU =0”, VDOT

當 變數(區域) “CU =0”
 變數 “dg1 +0”, VDOT

旋轉區
當 變數(區域) “dg1 >0”
 座標變換(區域) “y =-1”
  停用
   變數 “DG1 +1”, VDOT
  啟用
 變數 “dg1 -1”, VDOT
  
當 變數(區域) “dg1 <0”
 座標變換(區域) “y =1”
  停用
   變數 “DG1 -1”, VDOT
  啟用
 變數 “dg1 +1”, VDOT
  
當 變數(區域) “dg1 =0”
 變數 “dg2 +0”, VDOT

當 變數(區域) “dg2 >0”
 座標變換(區域) “y =-37”
  停用
   變數 “DG2 +1”, VDOT
  啟用
 變數 “dg2 -1”, VDOT
  
當 變數(區域) “dg2 <0”
 座標變換(區域) “y =37”
  停用
   變數 “DG2 -1”, VDOT
  啟用
 變數 “dg2 +1”, VDOT
  
當 變數(區域) “dg2 =0”
 (結束)

還原區

範本地圖

Variable Distance Orbit Transformation(高階歸元)

SteamSolo.com