概要
BveTs Map 2.00:utf-8 | 每個地圖檔案的第一行必須以「標頭」記載檔案格式。 |
Curve.Gauge(1.067); | 每句指令後方要以一個「;」(分號)作結尾。 |
Track[‘Right’].Position(3.8, 0); | 基本語法中,每句指令由「物件」、「鍵」、「方法」和「參數」組成。 |
0; | 指令如只有整數的話,則用作表示下述指令所套用到的距離點。 |
123; Curve.BeginTransition(); SpeedLimit.Begin(90); | 你可以記述多於一行指令。 |
Track [ ‘Right’ ] . Cant ( 0 ) ; 234 ; | 各指令詞之間可以插入空白字符。 |
Curve.BeginCircular( 600, 0.105 ); |
各指令詞之間可以插入換行字符。然後就可以記述一個多行的指令。 |
track[‘right’].cant(0.105); | 大小寫均相同。 |
345; # 圓曲線終了 | 以「#」(井號)或「//」(兩個斜號)作為該行文字的開端的話將會被視為註釋行(comment),並在讀取時被無視。 |
檔案格式
在檔案開端必須記述「BveTs Map 2.00」檔案格式。
字元編碼 NEW
在檔案格式以後,先寫上分號 ( : ),再寫上字元編碼名稱,然後才開新行。請勿在分號的前或後方插入空白字符。如果略過設定字元編碼的話,程式會以 UTF-8 編碼來讀取其後內容。
以下舉例在使用 Shift-JIS 字元編碼時的寫法:
BveTs Map 2.00:shift_jis |
以「#」(井號)或「//」(兩個斜號)作為行的開端的話將會被無視。此與指令結尾時所使用的「;」(分號)有所不同。
你可以將數値或文字寫入到變數中。要設定變數,先寫上變數名稱,再寫上等號 ( = ),然後寫上其值或運算式。
$foo = 1.067; $bar = ‘Hello’; |
當你在鍵中引用變數時,變數中已寫入的值將會被使用。
Track[$bar].Gauge($foo); # 此句效果與 Track[‘Hello’].Gauge(1.067) 相同。 $foo2 = $foo; # $foo2 會被代入 1.067 的這個值。 |
數值、字串均可寫入到變數中。寫入字串時字串值需用單引號「’」括起。變數名稱前方必需加上「$」(元貨幣符號)。變數名稱則可以使用英文大寫(A-Z)、小寫字(a-z)、數字(0-9)以及底線字符(_)。
以下為不正確使用變數的例子:
foo = 1; # 變數名稱必需以「$」符號作開首。 $foo.bar = 1; # 變數名稱只可包含英文大、小寫、數字以及底線字符。 $foo = $bar = 1; # 一句指令中不可同時對多個變數傳值。 1 = $foo;# 變數傳值的指令不可左右掉轉。 $bar = Hello; # 寫入字串時字串值需用單引號「’」括起。 Curve.Gauge($foo = 1); # 變數傳值的指令必需單獨使用。 Curve.Gauge(‘$foo’); # 使用變數時不用將變數名稱以單引號括起,否則該鍵值會變為該變數名稱。 $bar = ‘Curve.Gauge’; $bar(1.067); # 在指令中除了鍵和參數以外,其他地方均不可使用變數。 |
$foo = 1 + 2; # 與 $foo = 3 等值。 Curve.Gauge(1067 / 1000); # 與 Curve.Gauge(1.067) 等值。 |
以下為可使用的運算子。唯遞增(++)、遞減(–)運算子並不適用及對應,敬請留意。
演算子 | 意思 |
+ | 加值或字串接合 |
– | 減值 |
* | 乘值 |
/ | 除值 |
% | 除值後取其餘數 |
以運算子 + 來說,
相加的項目為數字的話結果為相加後的和,而相加的項目為字串的話結果為兩個字串依次序連接後的新字串。如果相加的項目同時含有數字及字串的話,數字會先被轉為字串,然後依字串相加的方法處理。
$bar = ‘Hello’ + ‘World’; # 與 $bar = ‘HelloWorld’ 等值。 Track[$bar + 10].Gauge(1.067); # 與 Track[‘HelloWorld10’].Gauge(1.067) 等值。 $bar = 1 + 2 + ‘3’ # 與 $bar = ’33’ 等值。 |
運算子的運算優先順序如下:
優先順序 | 運算子 |
1 | 括弧 |
2 | 一元運算子 (只有一個運算元的運算子) |
3 | * / |
4 | + – |
以下算式將會得出數值為 15 的結果:
1 – 2 * -(3 + 4) |
以下為錯誤示範:
$foo = 2 (3 – 1); # 乘算時必需加上「*」運算子。 $foo = 1 / {(2 + 3) * 4}; # 大、中、小括號在此並沒有意義。 $foo * 1000 = 1067; # 傳值指令的左方不可使用運算子。 $bar = ‘Hello’ * 2; # 字串與字串或數字間只能使用「+」運算子。 |
如果指令為以下語法的話,該指令會被視為設定下述指令所套用到的距離點。
- 純數字
- 值為數字的變數
- 運算結果為數字的算式
設定距離點的值必需為等於或大於 0 的整數。而變數 distance 則代表套用到該行時距離點的值(既定變數並不使用 $ 作開首)。
以下將會示範距離點的設定方法:(以下的 $foo 變數為一個已傳入數字的變數)
1000; # 設定現在的距離點為 1000 。 |
在此設定的距離值通常會與現實中有差別。由於模擬時的誤差再加上運算上的誤差而產生的誤差會不斷擴大,故此建議盡可能將誤差縮至最小。
基本語法如下:
物件[鍵].方法(參數, 參數, …)
自身列車所行走的軌道
Curve.Gauge(value)
設定軌條間距。此值乃用於計算傾側滾動角。
value 軌條間距 [m]
Curve.BeginTransition()
開始平面曲線的緩和曲線。
Curve.BeginCircular(radius, cant)
開始平面曲線的圓曲線。
radius 曲線半徑 [m] (正: 右曲線, 負: 左曲線)
cant 傾斜時外彎軌條升高高度 [m]
Curve.End()
結束平面曲線,開始直線。
Gradient.BeginTransition()
開始縱面曲線。
Gradient.BeginConst(gradient)
開始一定的坡度。
gradient 坡度 [‰]
Gradient.End()
結束坡度、開始固定水平度。
其他軌道
Track[trackKey].Gauge(value)
設定其他路軌的軌條間距。此值乃用於計算傾側滾動角。
trackKey: 軌道名稱(任意字串)
value 軌條間距 [m]
Track[trackKey].Position(x, y)
Track[trackKey].Position(x, y, radiusH, radiusV)
設定其他路軌的位置。要設定軌道物件的話請使用 Repeater[].Begin0 指令。
trackKey: 軌道名稱(任意字串)
x: 與自身軌道間 x 軸的距離 [m]
y: 與自身軌道間 y 軸的距離 [m]
radiusH: 與下個 Track[].Position 指令之間的平面曲線的半徑 [m] (0: 直線)
radiusV: 與下個 Track[].Position 指令之間的縱面曲線的半徑 [m] (0: 直線)
Track[trackKey].Cant(value)
設定其他軌道的傾側度。記述多個 Track[].Cant 指令時兩者之間將以線性補間。
trackKey: 軌道名稱(任意字串)
value: 傾側度 [m] (正: 向右傾側, 負: 向左傾側)
風景
Structure.Load(filePath)
載入及使用物件列表檔案。使用物件前必需加插本指令。
filePath: 該物件列表檔案的相對路徑
Structure[structureKey].Put(trackKey, x, y, z, rx, ry, rz, tilt, span)
加插一個物件。
structureKey: 物件名稱(物件列表檔案中所定義的物件名稱)
trackKey: 要加插到的軌道名稱 (0: 自身軌道)
x: 與該軌道間 x 軸的距離 [m]
y: 與該軌道間 y 軸的距離 [m]
z: 與該軌道間 z 軸的距離 [m]
rx: 與該軌道依 x 軸轉動的角度 [deg]
ry: 與該軌道依 y 軸轉動的角度 [deg]
rz: 與該軌道依 z 軸轉動的角度 [deg]
tilt: 傾斜選項 (0: 正常水平, 1: 與坡度一起傾斜, 2: 與曲線傾側一起傾斜, 3: 與坡度及曲線傾側一起傾斜)
span: 曲線時中心線的長度 [m]
Structure[structureKey].Put0(trackKey, tilt, span)
加插一個物件。此指令與參數 x, y, z, rx, ry, rz 的值為 0 的 Structure[].Put 指令的效果相同。
structureKey: 物件名稱(物件列表檔案中所定義的物件名稱)
trackKey: 要加插到的軌道名稱 (0: 自身軌道)
tilt: 傾斜選項 (0: 正常水平, 1: 與坡度一起傾斜, 2: 與曲線傾側一起傾斜, 3: 與坡度及曲線傾側一起傾斜)
span: 曲線時中心線的長度 [m]
Structure[structureKey].PutBetween(trackKey1, trackKey2)
在兩條軌道之間加插一個物件。當兩條軌道之間的距離變動時物件亦相對地作出變形。
trackKey1: 第一條軌道的軌道名稱 (0: 自身軌道)
trackKey2: 第二條軌道的軌道名稱
Repeater[repeaterKey].Begin(trackKey, x, y, z, rx, ry, rz, tilt, span, interval, structureKey1, structureKey2, … , structureKeyN)
開始連續加插物件。物件將會以固定的間距沿軌道放置。
repeaterKey: 連續加插名稱(任意字串)
trackKey: 要加插到的軌道名稱 (0: 自身軌道)
x: 與該軌道間 x 軸的距離 [m]
y: 與該軌道間 y 軸的距離 [m]
z: 與該軌道間 z 軸的距離 [m]
rx: 與該軌道依 x 軸轉動的角度 [deg]
ry: 與該軌道依 y 軸轉動的角度 [deg]
rz: 與該軌道依 z 軸轉動的角度 [deg]
tilt: 傾斜選項 (0: 正常水平, 1: 與坡度一起傾斜, 2: 與曲線傾側一起傾斜, 3: 與坡度及曲線傾側一起傾斜)
span: 曲線時中心線的長度 [m]
interval: 加插的間距 [m]
structureKey1, … , structureKeyN: 物件名稱(物件列表檔案中所定義的物件名稱)
物件將會依照參數 interval 所設的定距離 (dist) 逐個加插到地圖內。如果你有 N 個物件要連續加插到地圖內的話,每個物件將會以 (dist / interval) mod N + 1 的距離加插。
Repeater[repeaterKey].Begin0(trackKey, tilt, span, interval, structureKey1, structureKey2, … , structureKeyN)
開始連續加插物件。此指令與參數 x, y, z, rx, ry, rz 的值為 0 的 Repeater[].Begin 指令的效果相同。
repeaterKey: 連續加插名稱(任意字串)
trackKey: 要加插到的軌道名稱 (0: 自身軌道)
tilt: 傾斜選項 (0: 正常水平, 1: 與坡度一起傾斜, 2: 與曲線傾側一起傾斜, 3: 與坡度及曲線傾側一起傾斜)
span: 曲線時中心線的長度 [m]
interval: 加插的間距 [m]
structureKey1, … , structureKeyN: 物件名稱(物件列表檔案中所定義的物件名稱)
Repeater[repeaterKey].End()
結束連續加插物件。
repeaterKey: 連續加插名稱
Background.Change(structureKey)
變更背景物件。
structureKey: 物件名稱
停車點
Station.Load(filePath)
載入及使用停車點列表檔案。使用 Station.Put 指令前必需加插本指令。
filePath: 該停車點列表檔案的相對路徑
Station[stationKey].Put(door, margin1, margin2)
設定停車點。要加插列車停止位置目標物件的話請再使用 Structure.Put 指令。
stationKey: 停車點名稱(停車點列表檔案中所定義的停車點名稱)
door: 開門位置(-1: 左, 1: 右)
margin1: 停止位置誤差的後方容許範圍(請設定負數值)
margin2: 停止位置誤差的前方容許範圍
訊號
Signal.Load(filePath)
載入及使用訊號燈物件列表檔。使用 Signal.Put 指令前必需加插本指令。
filePath: 該訊號燈物件列表檔的相對路徑
Section.BeginNew(signal0, signal1, … , signalN)
開始一個閉塞訊號區間。
signal0: 當先行列車在下一個閉塞訊號區間時所顯示的訊號燈的索引號
signal1: 當先行列車在下兩個閉塞訊號區間時所顯示的訊號燈的索引號
signalN: 當先行列車在下 n+1 個閉塞訊號區間時所顯示的訊號燈的索引號
Signal[signalAspectKey].Put(section, trackKey, x, y)
Signal[signalAspectKey].Put(section, trackKey, x, y, z, rx, ry, rz, tilt, span)
加插一個地面訊號燈。
signalAspectKey: 訊號燈物件名稱 (訊號燈物件列表檔中所定義的訊號燈物件名稱)
section: 關聯的下 n 個的閉塞訊號區間
trackKey: 要加插到的軌道名稱
x: 與該軌道間 x 軸的距離 [m]
y: 與該軌道間 y 軸的距離 [m]
z: 與該軌道間 z 軸的距離 [m]
rx: 與該軌道依 x 軸轉動的角度 [deg]
ry: 與該軌道依 y 軸轉動的角度 [deg]
rz: 與該軌道依 z 軸轉動的角度 [deg]
tilt: 傾斜選項 (0: 正常水平, 1: 與坡度一起傾斜, 2: 與曲線傾側一起傾斜, 3: 與坡度及曲線傾側一起傾斜)
span: 曲線時中心線的長度 [m]
Beacon.Put(type, section, sendData)
加插一個地面訊號發送器。要加插地面訊號發送器物件的話請再使用 Structure[].Put 指令。
type: 保安裝置中所識別的地面訊號發送器的類別(整數)
section: 關聯的下 n 個的閉塞訊號區間
sendData: 發送到保安裝置的數據值(整數)
Signal.SpeedLimit(v0, v1, … , vn)
設定訊號燈亮時所許可的速度限制。
v0, v1, … , vn: 行駛速度 [km/h]
限制速度
SpeedLimit.Begin(v)
開始限制速度。要加插限制速度標誌物件的話請再使用 Structure.Put 指令。
v: 行駛速度 [km/h]
SpeedLimit.End()
結束限制速度。要加插解除限制速度標誌物件的話請再使用 Structure.Put 指令。
先行列車
PreTrain.Pass(time)
PreTrain.Pass(second) NEW
設定先行列車通過該距離點時的時間。
time: 時間的字串值 (‘hh:mm:ss’)
second: 以 00:00:00 作起點計算的秒數的時間值 [sec]
光源
Light.Ambient(red, green, blue)
設定環境光源的顏色(Ambient Colour)。此指令只能在地圖檔案中使用一次。
red: RGB 顏色系統中紅色的比率值 (0 ~ 1)
green: RGB 顏色系統中綠色的比率值 (0 ~ 1)
blue: RGB 顏色系統中藍色的比率值 (0 ~ 1)
Light.Diffuse(red, green, blue)
設定平行光源的顏色(Diffuse Colour)。此指令只能在地圖檔案中使用一次。
red: RGB 顏色系統中紅色的比率值 (0 ~ 1)
green: RGB 顏色系統中綠色的比率值 (0 ~ 1)
blue: RGB 顏色系統中藍色的比率值 (0 ~ 1)
Light.Direction(pitch, yaw)
設定在距離點為 0 的位置時,平行光源所射向的方向。此指令只能在地圖檔案中使用一次。
煙霧效果
Fog.Set(density, red, green, blue)
設定煙霧效果。記述多個 Fog.Set 指令時兩者之間將以線性補間。
density: 濃度
red: RGB 顏色系統中紅色的比率值 (0 ~ 1)
green: RGB 顏色系統中綠色的比率值 (0 ~ 1)
blue: RGB 顏色系統中藍色的比率值 (0 ~ 1)
駕駛室
CabIlluminance.Set(value)
設定駕駛室的亮度。
value: 亮度 (0 ~ 1)
列車特性
Irregularity.Change(x, y, r, lx, ly, lr)
設定列車在軌道上的位移。
x: 左右位移 (相當於左軌條與右軌條左右變位的平均值) 的標準偏差 [m]
y: 上下位移 (相當於左軌條與右軌條高低變位的平均值) 的標準偏差 [m]
r: 水平旋轉位移 (相當於軌道水平旋轉位移除以軌道無水平旋轉位移的值) 的標準偏差 [rad]
lx: 左右位移的極限 [m]
ly: 上下位移的極限 [m]
lr: 水平旋轉位移的極限 [m]
Adhesion.Change(a)
Adhesion.Change(a, b, c)
設定車輪與軌條間的黏著程度。
a: 行駛速度為 0 km/h 時的黏著係數
b: 在指定行駛速度時計算黏著係數的 b 的值
c: 在指定行駛速度時計算黏著係數的 c 的值
以上算式中,v: 行駛速度 [km/h]
聲音
Sound.Load(filePath)
載入及使用聲音列表檔案。
filePath: 該聲音列表檔案的相對路徑
Sound[soundKey].Play()
當經過該距離點時播放一次該 soundKey 聲音。
Sound3D.Load(filePath)
載入及使用聲音列表檔案。
filePath: 該聲音列表檔案的相對路徑
Sound3D[soundKey].Put(x, y)
加插一個固定音源點。該固定音源點會連續播放該 soundKey 聲音。
x: 與該軌道間 x 軸的距離 [m]
y: 與該軌道間 y 軸的距離 [m]
RollingNoise.Change(index)
轉用其他車輪滾動聲。
index: 列車聲音檔案中 [Run] 部分所定義的屬性的索引號
FlangeNoise.Change(index)
轉用其他行駛曲軌時的磨擦聲。
index: 列車聲音檔案中 [Flange] 部分所定義的屬性的索引號
JointNoise.Play(index)
當經過此距離點時根據列車行駛速度播放經過道岔(波口)時的噪音。
index: 列車聲音檔案中 [Joint] 部分所定義的屬性的索引號
其他列車
Train.Add(trainKey, filePath, trackKey, direction)
加插一個其他列車車組檔案中所定義的其他列車車組。
trainKey: 其他列車名稱(任意字串)
filePath: 該其他列車車組檔案的相對路徑
trackKey: 行駛的軌道
direction: 行駛方向(-1: 相反(對頭車), 1: 並行)
Train[trainKey].Enable(time)
Train[trainKey].Enable(second) NEW
當自身列車經過該距離點時,並且當指定時間一到,該其他列車就開始行駛。
trainKey: 其他列車名稱
time: 時間的字串值 (‘hh:mm:ss’)
second: 以 00:00:00 作起點計算的秒數的時間值 [sec]
Train[trainKey].Stop(decelerate, stopTime, accelerate, speed)
使該其他列車在該距離點停車。
trainKey: 其他列車名稱
decelerate: 減速度 [km/h/s]
stopTime: 停車時間 [s]
accelerate: 加速度 [km/h/s]
speed: 加速後的行駛速度 [km/h]
你可以使用 include 指令在指定位置插入其他地圖檔案。
include ‘submap.txt’; |
插入的檔案必須包含標頭部分。然而,該檔案的標頭將不會被插入。
em/p/p# 設定為 975 。
/em