1、对象的自带变量
对象自身会带有一些变量,这些变量通常与对象自身的状态、属性、行为相关。
例:
由于自带的变量数量众多,不在此一一列出,在各个章节中逐渐介绍。x:表示对象的实例在房间的位置的x坐标。
y:表示对象的实例在房间的位置的y坐标。
speed:表示对象的实例的速度(单位:像素/步)。
gravity:表示对象的重力(单位:像素/步²)。准确的说应该是对象的加速度。
sprite_index:表示对象的实例的图像(精灵,Sprite)对应的索引(Index)
GM自带的变量会自动染上红色,切记自定义的变量名不能和自带变量的变量名冲突!
2、对象实例的创建
正如第四章的第五节所说,我们可以通过直接在房间里面放置对象(Objects)来创造它的实例(Instances)。但是有的时候,我们并不想让他们在房间开始的时候就创建,例如射击游戏中,子弹的实例应该在射击时才被创建。
这时我们可以用到这个函数:instance_create(x,y,obj);
在房间的(x,y)的位置创造一个对象obj的实例,并返回这个实例的索引(ID)。
例子:
在对象objControl的create事件(创建事件)里写:新建对象objControl,objBullet。
在对象objControl的alarm0事件(计时器0号事件)里写:alarm[0] = 50; //这句话的意思是50步之后执行alarm0事件
给对象objBullet加上子弹的精灵(Sprite),然后在create事件里写上:instance_create(100,200,objBullet);
alarm[0] = 50;
speed = 6; //注意:speed默认方向为向右
把对象Control摆在房间里,设置房间速度为50帧,运行游戏,就实现了每隔1秒钟在位置(100,200)创建一个向右的速度为6像素/步的子弹。
效果如图:
注意:实例在离开游戏窗口之后不会自动销毁。
也就是说,上面的例子中离开游戏窗口的子弹,实际上还是一直在向更右的右边运动。所以,在制作弹幕游戏时,若不清理掉离开了游戏窗口的实例,必然会导致游戏越玩越卡。
所以我们应该在对象objBullet的离开游戏房间事件里写上:
这样objBullet的实例在超出房间边缘时会自我销毁:instance_destroy();