## 内置变量
Ship框架内置了很多变量,方便直接读取和调用。内置变量比较标准的叫法是:类的(成员)属性
在编写过程中,我遵守的规范是:
>[danger] 外部可以访问的变量都统一写在Ship类的顶部,并做了分类和注释
目前所有变量如下:
```
// ----- 静态属性 -----
public static int timetick; //帧计时器。注意:这是一个静态变量,使用Ship.timetick访问它,它是这个类共有的变量而不是某个实例化后的飞船特有的。
// ----- 方块类变量 -----
public IMyShipController Cockpit;
public IMyShipConnector Connector;
public IMyShipConnector MotherConnector;
public List<IMyLargeTurretBase> AutoWeapons = new List<IMyLargeTurretBase>();
public List<IMySmallGatlingGun> GatlingGuns = new List<IMySmallGatlingGun>();
public List<IMySmallMissileLauncher> RocketLaunchers = new List<IMySmallMissileLauncher>();
public List<IMyCameraBlock> Cameras = new List<IMyCameraBlock>();
public List<IMyGyro> Gyroscopes = new List<IMyGyro>();
public List<IMyThrust> Thrusts = new List<IMyThrust>();
public List<string> ThrustField = new List<string>();
public List<string> gyroYawField = new List<string>();
public List<string> gyroPitchField = new List<string>();
public List<string> gyroRollField = new List<string>();
public List<float> gyroYawFactor = new List<float>();
public List<float> gyroPitchFactor = new List<float>();
public List<float> gyroRollFactor = new List<float>();
// ---- 必要配置变量 ----
public string Debug = "Normal"; //错误报告,通过这个变量判断是否初始化成功
// ----- 运动信息和相关变量 -----
public Vector3D Position;
public Vector3D Velocity;
public Vector3D Acceleration;
public double Diameter;
// ---- 瞄准PID算法参数 ------
public double AimRatio = 3; //瞄准精度,单位:度。用来是否瞄准,以便其他动作判断。不影响瞄准的效率。当瞄准块的正前方向量与瞄准块和目标的连线向量夹角小于这个值时,整个系统判定瞄准了目标。
public int AimPID_T = 5; //PID 采样周期(单位:帧),周期越小效果越好,但太小的周期会让积分系数难以发挥效果
public double AimPID_P = 0.8; //比例系数:可以理解为整个PID控制的总力度,建议范围0到1.2,1是完全出力。
public double AimPID_I = 3; //积分系数:增加这个系数会让静态误差增加(即高速环绕误差),但会减少瞄准的震荡。反之同理
public double AimPID_D = 10; //微分系数:增加这个系数会减少瞄准的震荡幅度,但会加剧在小角度偏差时的震荡幅度。反之同理
```
需要说明的是关于推进器和陀螺仪的调用和处理方法:
>[danger] 1、请在Main函数中每一帧都让Ship.timetick += 1
>这是一个静态变量,使用类名前缀来访问它,它用来记录帧,相当于时钟,用处非常多。
>[danger] 2、在推进器变量Thrusts下附带了一个ThrustField变量。
>在Ship实例化的过程中,它会自动处理所有推进器和主控的方向关系。
>并生成一个与Thrusts同样长的数组来储存这个关系。
>当你需要知道推进器Thrusts[5]相对主控座椅的方向时,直接访问ThrustField[5]即可。
>Ship框架内部对陀螺仪的操作也是基于这个方法。
- 序言
- 写在前面的话
- 太空工程师
- MEA小组
- 一、入门
- 1.1 基础概念
- 1.2 编程工具
- 1.3 变量
- 1.4 函数 Function
- 1.5 基本语法
- 1.5.1 运算符
- 1.5.2 if
- 1.5.3 for
- 1.5.4 其他语法
- 1.3 类 Class
- 二、编程块
- 2.1 方块的概念
- 2.2 List<T>结构
- 2.3 获取方块
- 2.4 方块的使用
- 三、Ship 类
- 3.1 简介
- Ship v0.5
- 代码
- 手册(待更新)
- 例子(待更新)
- Ship v1.0
- 代码
- 例子
- 文档
- 实例化
- 内置变量
- 内置方法
- Target类
- 四、运动控制算法在SE中的应用
- 4.1 运动控制介绍
- 4.2 过程控制
- 4.3 震荡和动态误差
- 4.4 误差累加方案
- 4.5 PID算法
- 4.6 对PID算法的一点点简化
- 4.7 一阶惯性系统的PID算法优化的研究
- 五、MEA方块类
- 5.0 核心代码目录
- v1.0核心代码
- v1.1 核心代码
- v2.0 核心代码
- 5.1 类的概念
- 5.2 MEA的方块类(Block)
- 5.3 方块类文档
- 5.4 方块类2.0 全教程
- 5.4.1 安装和使用
- 5.4.2 方块类(Block)
- 5.4.3 显示屏类(DisplayScreen)
- 5.4.4 LCD类(LCD)
- 5.4.5 主控座椅类(Cockpit)
- 六、疯猴的编程笔记
- 第一个程序
- 获取和控制其他块
- 物流与生产
- 界面与通信
- 运动与姿态
- 侦测与导航
- 七、SteamZhou的笔记
- 有趣而花里胡哨的IDEA
- 八、质子对撞炮的笔记
- 属性 Property
- 接口 interface