Jump to content
模组网
icedream

【Creation Kit 学习指南 31】数组

Recommended Posts

描述

数组是一种特殊的变量,它可以包括一个以上相同类型的值。你可以通过一个数字顺序索引选择一个值,它的范围是从0到数组长度减一。

声明数组

float[] myFloatArray
ObjectReference[] myObjectArray = new ObjectReference[10]
myFloatArray是一个浮点型空数组。它的长度为0,且不等于任何数。 myObjectArray也是这样,不同的是它是目标ObjectReference的数组。它对目标ObjectReference指定一个含有10个元素的新数组(全部默认初始值为空值)

注意你不能设定数组的元素为数组或一个多维数组。

你当然可以将属性设置为数组,编辑器将会展现一个特殊用户界面,方便你添加、移除和重新设定数组里的元素

例如:

Weapon[] Property MyWeapons Auto
新的调用必须在函数中完成。你不能将它用于函数以外的目标变量。如果你希望在空数组中设定变量,那么你要把数组设定在初始化事件中。

函数参数

读写数组的方式和读写函数参数的方式一样,使用和声明数组相同的语法。

例如:

Function MyArrayFunction(int[] myArray, bool someOtherParameter)
EndFunction
函数返回值

将函数值返回到数组中,使用和先前相同的语法。

例如:

int[] Function MyReturnArrayFunction()
	int[] someArray = new int[10]
	return someArray
endFunction
创建数组

要想创建一个数组,在数组元素类型前使用关键字"new",并在方括号中输入数组长度。数组长度必须是介于1和128之间的整型数 - 不能使用变量。换句话说,在汇编时就要知道数组长度。数组中的默认初始值是0、假、""、空

例如:

new bool[5]
new Weapon[25]
通常情况下你直接声明数组变量,但是如果一个函数需要一个数组,那么你可以在函数调用中创建一个新数组。

例如:

MyArrayFunction(new int[20])
读取/写入元素

要想从一个数组中读取写入一个简单值,可以在变量名称后使用包括所需元素个数的括号。下标可以是一个整型变量、整型数或表达式。数组下标是从0(首个元素)到数组长度减1的可用值。

例如:

myArray[20] = newValue
someRandomValue = myArray[currentIndex]
myArray[i * 2] = newValue
如果数组元素是其它脚本,你可以按照相同方法存取属性和函数。

例如:

DoorArray[currentDoor].Lock()
objectXPos = ObjectArray[currentObject].X
注意:由于数组是通过引用传递和分配的,因此任何对数组元素的修改将会反映在任何与此数组有关的其它变量中。

读取长度

你可以很容易地通过调用长度属性获取任何数组的长度。如果你没有给数组分配任何元素,那么它的长度将为0

例如:

int ArrayLength = myArray.Length
分配/传递数组

给数组分配其它数组,或给函数传递数组,方法和变量一样。然而,注意数组是由引用传递和分配,类似于目标。换句话说,如果你将数组分配给其它数组或函数,方法和先前一样 - 如果一个被改变,那么另一个将会受影响。

例如:

int[] Array1 = new int[5]
int[] Array2 = Array1 ; Array1 and Array2 now look at the same array!
Array1[0] = 10
Debug.Trace(Array2[0]) ; Traces out "10", even though you modified the value on Array1
分配数组

数组可以分配字符串或逻辑值。如果你给数组分配一个字符串,它将会把每个元素放入括号中,并用逗号分开。如果数组特别长,那么它将会在末尾予以省略。如果给数组分配一个逻辑值,那么当长度不为0时它将为真,如果长度为0时就为假。你不能给数组分配不同类型的元素,即使能成功分配。

例如:

Debug.Trace(MyArray) ; Traces out "[element1, element2, element3]" or "[element1, element2, ...]" if the array is too large
if (MyArray)
	Debug.Trace("Array has at least one element!")
else
	Debug.Trace("Array has no elements!")
endIf
常见任务

修改每个元素

你也许想多次修改数组中的每个元素。可以简单的通过循环语句设定,然后对每个元素进行修改。

例如:

Function DisableAll(ObjectReference[] objects)
	int currentElement = 0
	while (currentElement < objects.Length)
		objects[currentElement].Disable()
		currentElement += 1
	endWhile
EndFunction
注意:只要元素序号低于数组长度,循环就会进行下去。这是因为可用元素序号从0到数组长度减1。如果你在循环条件中使用"<=",那么最后一个元素将会出错,因为下标为数组长度的那个元素超出范围。

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...