GameMaker8.0 新手教程 Part 5 -变量与逻辑(上)-

分类栏目:gamemaker教程

1014

GameMaker8.0 新手教程 Part 5 -变量与逻辑(上)-

1、变量(Variable)

变量是任何编程语言的根基。
变量具有以下特性:
①变量名由英文字母和下划线和数字构成(数字不能在第一位),如:Spd,move_dir,_AIR,stu123等。
②变量可以储存一个数据,且可以改变其所储存的数据。
③变量可以参与运算,和普通数值的运算地位相同。
④变量有一定的可行范围,即某个变量只在特定的范围内可以使用,离开这个范围则不能使用。若可行范围不重叠,则两个变量可以取相同的名字不会冲突。

与变量相对的就是常量(Constant),任何不可改变的值都是常量,如15,75,23。不可改变的意思是指,如在GM里23就代表了“23”这个值,而不能通过人为的手段,让23去代表“48”的值,所以称为常量。
而一个变量,比如num,就可以随便改变它的值,它既能代表“23”的值,也可以让它代表“48”的值。
注:常量不仅包含普通的数据,但凡不能被更改值的量都被称为常量。比如GM自带的常量pi,它看起来是一个变量,但实际上它的值固定为3.1415926...是不可被更改的,所以pi也是个常量。

注意:GM会自带一些变量,这些变量往往和对象自身的属性,状态相关,不能用作自己的变量使用。GM自带的变量会自动染上红色,如果你的变量染上了红色,说明与GM自带变量冲突了,赶紧换一个名字吧。

2、变量赋值

GM8里变量的赋值可以直接通过等号实现,如:

vvv = 15;

这个时候vvv这个变量就储存了15这个数据。

变量可以随时改变自己的值,如:

acn = 13;
acn = 34;


变量之间也可以互相赋值,如:

_stu = 12.5;
temp = _stu;

这个时候temp的值也是12.5。

变量也可以通过运算赋值,如:

mine = 16 * 2 + 8;(*是乘号)

这时候mine的值为40。
或者:

num1 = 12;
num2 = 15;
add = num1 + num2;(变量在运算中与常量地位相同。)

这时候add的值为27。

3、运算

GM8除了支持除了基本的加减乘除外,还有一些其他运算方式如下:
mod : 求余/求模。用法:x mod y,求x除以y的余数。
div : 取整。用法:x div y,求x除以y的商。

&、|、^、~、>>、<<均为位运算的运算符,实际上几乎不会使用到这些运算。
但如果你要计算幂,不能使用类似3^2的格式,因为这个在GM里是位运算而不是幂运算。
要想计算幂需要使用幂函数power。计算3²应该写成power(3,2);

GM提供了一些简便的赋值运算符,他们是由基本运算符和赋值等号组成的,如:+=、-=、*=、/=等。
他们表示省略自身的赋值运算,如:

dep = 16;
dep += 12;

后一句的意思是,dep这个变量在自身的基础上增加12,相当于dep = dep + 12;,最终dep值为28。
其余也是同理。

要注意的是使用带乘或除的赋值等号时,如:

num1 = 12;
num2 = 5;
num3 = 20;
num3 *= num2 + num1;

最后一句相当于是num3 = num3 * (num2 + num1);
而不是num3 = num3 * num2 + num1;。

4、逻辑运算

逻辑运算是一种特殊的运算,他只能计算得到两个值:1或者0。

1和0即是“真”和“假”两个概念在编程中的象征。
即,规定当条件为“真”时,用1表示,当条件为“假”时,用0表示。

因为逻辑演算是由布尔建立的,所以逻辑运算又被称为布尔运算,“真”与“假”被称为布尔值。

逻辑运算的符号有:>(大于号),<(小于号),==(逻辑等号),>=(大于或等于号),<=(小于或等于号),!=(不等号),&&(逻辑与,可用and代替),||(逻辑或,可用or代替),^^(逻辑异或,可用xor代替),!(逻辑非)。
注意逻辑运算的&&,||,^^不能只写一个符号


逻辑运算的格式为  x 逻辑运算符 y,与常规的运算符相同。
当x和y满足判定条件时,值为1,不满足时值为0。
如:

a = 3 > 2;

显然3 > 2成立,故a的值为1。

b = 16 == 12 + 5;

显然16和12 + 5并不相等,故b的值为0。
其余逻辑运算均同理。

逻辑与、或、异或用于连接不同的逻辑判定,如:

a = 3 > 2 && 5 > 4;(或a = 3 > 2 and 5 > 4)

此时3 > 2成立,计算结果为1,5 > 4也成立,计算结果也是1,所以a的值为1;

&&(或and)表示只有两边都为1时才为1,任何一边为0都得到0。
||(或or)表示任何一边为1就为1,只有都为0时值才为0。
^^(或xor)表示两边值不相等时得到1,两边值相等时得到0。

逻辑非(!)表示颠倒0和1,如:

b = !a;

若a为0,则b为1,若a为1,b为0。(一般的,当a是正数时,!a 等于0。)
注意!的优先级非常高,如:

a = !3 > 4;

这里是先执行!3得到0,之后再执行0 > 4得到0,结果a为0。
所以要想让3 > 4先执行,就要使用括号:

a = !(3 > 4);
结果a为1。


当出现数量较多的逻辑与、或、亦或时,按照从左到右的顺序执行,如:

a = 16 > 5 && 24 != 13 * 5 || 16 + 8 < 11;

为了方便阅读,建议加上括号:

a = (16 > 5) && (24 != 13 * 5) || (16 + 8 < 11);

先执行(16 > 5) && (24 != 13 * 5),计算结果是1,然后再执行1 || (16 + 8 < 11),计算结果是1。

注:GM自带了两个常量true和false,值分别是1和0。在逻辑判断的时候,可以用true和false代替1和0,以便于代码的阅读。

如果你搞不清运算符之间的优先度,你可以给所有不确定的地方都打上括号,括号的优先度是最高的。

5、if语句

if语句的格式是:

if(判定条件)
{
语句1;
语句2;
...
}

当if后小括号里的值判定为1时,才会执行花括号里的代码。(同上述,正数均视为1)
如:

if(3)
{
a = 15 + 6;
}

或者

a = 15;
if(a)
{
a -= 3;
a *= 2;
}

或者

a = 15;
b = 2;
if((a >= 12) && (a != b))
{
a -= b;
b += 1;
}

以上if括号中的判定都是1,花括号里内容都会执行。