地圖檔案

概要

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

註釋 UP

以「#」(井號)或「//」(兩個斜號)作為行的開端的話將會被無視。此與指令結尾時所使用的「;」(分號)有所不同。

變數 NEW

你可以將數値或文字寫入到變數中。要設定變數,先寫上變數名稱,再寫上等號 ( = ),然後寫上其值或運算式

$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); # 在指令中除了參數以外,其他地方均不可使用變數。

運算子 NEW

在變數傳值、參數中均可使用運算子。

$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 。
1000 – 25; # 設定為 975 。
distance + 0.5; # distance 為上一次設定的位置,所以再運算以後則是設定為 975.5 。
$foo; # 設定為 $foo 的值。

在此設定的距離值通常會與現實中有差別。由於模擬時的誤差再加上運算上的誤差而產生的誤差會不斷擴大,故此建議盡可能將誤差縮至最小。

基本語法

基本語法如下:

物件[鍵].方法(參數, 參數, …)

自身列車所行走的軌道

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]

插入其他地圖檔案 NEW

你可以使用 include 指令在指定位置插入其他地圖檔案。

include ‘submap.txt’;

插入的檔案必須包含標頭部分。然而,該檔案的標頭將不會被插入。

em/p/p# 設定為 975 。

/em

回應已關閉。