跳转至

3. 创建您的第一条线路

理论结合实践是最高效的学习方式。本章将引导您创建并理解您的第一条 openBVE 线路。

线路文件的基本构成

创建一条可运行的 openBVE/Hmmsim 线路并不复杂。一个最基础的线路文件需要满足以下条件:

  • 文件格式: 必须是遵循 CSV 线路格式规范.csv 文件。
  • 车站定义: 必须至少包含两个车站(起点和终点)。
  • 列车指定: 必须指定一个配套的列车。
  • 轨道或物件: 必须至少加载一个轨道模型或放置一个物件。这是 openBVE 识别其为线路文件的标志。

下面是一条最简线路的示例,它包含了运行所需的所有基本元素。

在 openBVE 中选择示例线路

示例线路运行效果

虽然这条线路仅包含两个相距 500 米的车站和基础的轨道,缺乏复杂的场景,但它已经是一个功能完整的线路。


线路文件结构解析

让我们通过分析示例线路的源代码,来学习线路文件的基本语法和结构。

示例代码

With Options
; Header statement.
.ObjectVisibility 1

With Route

With Train
    .File CRT1000
    .Run(0).Set 0
    .Flange(0).Set 0

With Structure
    .Rail(0).Load zbx1425/tutorial/rail/gndblst0.csv

With Texture

With Cycle

With Signal

With Track
0
    .Sta DemoStart;;;;L;;;;30
80
    .Stop 1
500
    .Sta DemoEnd;;;;L;;;;30
580
    .Stop 1

核心概念

1. 指令 (Commands)

指令是构成线路文件的基本元素,用于告知游戏执行特定操作,例如“放置一个车站”或“加载一个模型”。

2. 命名空间 (Namespaces)

为了更好地组织指令,openBVE 将它们划分到不同的 命名空间 中。每条指令都以 Namespace.Command 的形式呈现。例如,Track.Sta 指令属于 Track 命名空间,用于定义一个车站 (Station)。

主要的命名空间及其功能如下:

命名空间 用途 Hmmsim 兼容性
Options 配置 openBVE 程序设定,确保线路正确加载
Route 设定线路的基本信息和参数
Train 加载列车,设定列车配置信息
Structure 加载线路所需的模型文件(如建筑、轨道)
Texture 加载线路背景图片
Cycle 定义循环播放的地面或轨道贴图
Signal 加载信号机模型
Track 定义轨道沿线的具体内容,如车站、信号等

With 语句用于声明一个命名空间块。在该块内,所有以 . 开头的指令都会自动归属到该命名空间,从而简化代码。

例如,以下两种写法效果完全相同:

With Track
0
    .Sta DemoStart
80
    .Stop 1
0
    Track.Sta DemoStart
80
    Track.Stop 1

3. 参数 (Arguments)

参数跟在指令之后,用于定义指令的具体行为,参数之间用分号 ; 分隔。例如,在定义车站时,您需要通过参数指定站名、开关门方向、停车时间等。

Track.Sta DemoStart;;;;L;;;;30

这条指令定义了一个名为 DemoStart 的车站,左侧开门 (L),停车时间为 30 秒。

查阅官方文档

每条指令的详细参数说明都可以在 openBVE 官方线路开发文档 中找到。我们强烈建议您在开发过程中随时查阅。

4. 注释 (Comments)

以分号 ; 开头的行或行尾部分是注释。注释会被游戏忽略,仅用于开发者记录信息、提高代码可读性。

5. 轨道位置 (Track Position)

轨道位置是线路文件中最重要的概念之一。它是一个数字,代表当前点距离线路起点的距离(单位:米)。

Track 命名空间中,所有指令都基于其上方最近的轨道位置来确定其在游戏世界中的坐标。

0 ; 距离起点 0 米处 .Sta ... ; 在 0 米处放置车站 80 ; 距离起点 80 米处 .Stop 1 ; 在 80 米处设置停车点


思考与练习

为了巩固本章所学知识,请在继续学习前,花时间思考并实践以下问题。

  1. 理解示例线路中每一条指令的含义。
  2. 为什么 Options, Structure, RouteTrain 命名空间的指令通常放在文件的开头?
  3. 尝试删除 .ObjectVisibility 1,观察游戏效果有何不同?(提示:切换到车外视角并向后看)
  4. 尝试删除 Train.Run(0).Set 0Train.Flange(0).Set 0,观察列车行驶的声音有何变化?

进入下一章前

请亲手实践、查阅文档,确保您已完全理解本章内容,不要急于进入下一章节。

当您准备好后,请继续学习下一讲,我们将对这条基础线路进行一些有趣的修改。