太空工程师简单时钟可编程方块介绍

2015-01-07 10:08:58 k73游戏之家 作者:噬嗑饕餮

太空工程师

太空工程师已经推出了很长时间了,但是为了方便玩家们能够更好的理解ApI的使用,下面小编就跟玩家们介绍下关于太空工程师简易时钟教程。

先来看一下结构外观。当然,由于本教程以程序为主,外观结构并不重要,主要是将12盏灯排好,放上一个计时器,一个可编程方块加一个能源即可

太空工程师简单时钟可编程方块介绍

在游戏内的编程中,功能方块的名称是最主要的查找方式,所以在命名时一定要小心。

在这里,我的所有聚光灯都以“Spotlight 1”、“Spotlight 2”。。。的格式命名,共12个。

然后这里是最重要的了程序代码

太空工程师简单时钟可编程方块介绍
太空工程师简单时钟可编程方块介绍

内附详细讲解

如果图片看不清的话这里附上文字版的代码,不过由于没有颜色区分,看起来不方便

/*

* 该程序为一个简易时钟,将作为一个可编程方块的范例。

* 本程序目标是在一个计时器方块的辅助下,使12个聚光灯逐一亮起,如此循环。

* 其间隔由计时器方块控制,聚光灯必须以"Spotlight 1"、"Spotlight 2"...的方式按顺序命名

* 点亮顺序即为编号顺序

* */

int CurrentIndex, NextIndex; // 在循环中记录当前灯的编号与下一灯的编号。

int[] ID; // 记录每一个编号的灯在方块列表中的位置。

void Main()

{

// 声明一个方块列表,目前只支持IMyTerminalBlock,即功能方块列表

//(其实也支持方块组 IMyBlockGroup, 不过目前没有开放该类的端口),

//不支持装甲方块与装饰方块。

List Lights = new List();

// GridTerminalSystem 是调用方块的基本类,其中存放了所有的功能

//方块与调取方块的方法。

GridTerminalSystem

.GetBlocksOfType(Lights);// 该方法将所有<>内类型的方块

//放入()中的列表里,这里我们获得了一个所有聚光灯的列表。

ID = new int[Lights.Count]; // 简单起见,这里直接当我们没有多余的灯。

// 同上,获取一个计时器的列表。

List Clock = new List();

GridTerminalSystem

.GetBlocksOfType(Clock);

for(int i = 0; i < Lights.Count; i++){ // 开始循环,逐一检查。

//将当前的灯的信息cast入该方块最表层的Interface:IMyReflectorLight。

IMyReflectorLight Light = (IMyReflectorLight)Lights;

//拆分该灯的名称,用以获取该灯编号。

String[] LightName = Light.CustomName.Split(" "[0]);

//获取当前编号。

CurrentIndex = Convert.ToInt32(LightName[1])-1;

//记录该编号在列表中的位置。

ID[CurrentIndex] = i;

if(Light.Enabled){ //判断哪一盏灯处于开启状态(假设只有1盏)。

//如果该灯开启,则将其关闭。

Light

.GetActionWithName("OnOff_Off")//GetActionWithName返回一个IMyTerminalAction参数,即一个动作。

.Apply(Light);//Apply为一void方法,即将该动作施加于输入的方块。

//计算下一盏灯的编号(即需要点亮的那盏)。

if(CurrentIndex < 11){

NextIndex = CurrentIndex + 1;

}

else{

NextIndex = 0;

}

}

}

//通过在循环中记录的ID参数提取下一盏灯。

IMyReflectorLight LightN = (IMyReflectorLight)Lights[ID[NextIndex]];

//同样的,开启该灯。

LightN

.GetActionWithName("OnOff_On")

.Apply(Lights[ID[NextIndex]]);

//计时器开始计时,计时截止时其将再次激活本程序。

Clock[0]//假设计时器唯一,直接调用列表中第一个计时器。

.GetActionWithName("Start")

.Apply(Clock[0]);

}

玩家评论

相关阅读

手游掌机排行