启动GM8.0,GMS也行= = 。。。 为了保证大家在实验的时候与本教程完全同步,推荐大家使用论坛的超强汉化破解版GM8.0
新建一个工程,创建物体和房间,并把这个物体放入到房间里。
这里我给object0放了个精灵,目的是让大家知道已经把这货添加进了房间里(我这么做貌似没啥必要,防误解还是扔进去吧。)
之后,就要往物体里面写代码了,在object0的创建事件中,写下如下代码
fuck = "franniss";
这是在物体上简单的定义了一个变量
接下来,在物体的空格键按下事件中,写下如下代码。
show_message(fuck);
效果可想而知,在敲击空格键的时候,屏幕上会弹出一个消息提示框,那我我们来试一下。
敲击空格键,弹出消息框:
一切看上去很正常,嗯。接下来,稍微改动一下代码,将创建事件中的代码改写成如下代码。
var fuck;
fuck = "franniss";
这段代码,就用到了var关键字,定义了一个临时变量。
运行游戏,敲击空格键。
这时我们就发现,在敲完空格键之后,并没有弹出信息框,而是报了错。错误的原因是一个未知的变量fuck,
我们已经在创建事件中定义了fuck变量,为什么在按下空格事件中,这个变量不起作用呢?
实验证明,在创建事件中,已经成功的定义出了fuck变量,但是在敲击空格键的时候,这个变量就不存在了,所以,我们得出以下结论:
使用var关键字定义过的变量,只影响于当前事件,并不作用于整个实例,当事件结束的时候,这个变量会自动的从内存中删除掉。
这个结果只是当前得出的,并不是最标准的,下面,将在这个实验的基础上增加更多的动作来得到更准确的定义。
删除掉刚刚物体中的“按下空格”事件,并对创建事件进行改动。向创建事件中拖入两个代码按钮,如下图所示。
在第一个代码块中,写下如下代码:
var sb;
sb = "franniss";
在第二个代码块中,写下如下代码:
show_message(sb);
接下来,运行游戏。查看效果
根据运行结果我们会发现,程序依然报错,那么问题来了,我的var定义的变量明明和show_message时的变量在同一个事件里面,为什么还会报错。
这时我们再对程序进行修改,删除创建事件的一个代码按钮,留下一个,并改写成如下代码:
var sb;
sb = "franniss";
show_message(sb);
运行后你会发现,程序正常运行,弹出了灰色的信息提示框。
实验证明,在创建事件中,已经成功的定义出了sb变量,但是想让这个变量有效,所有使用到这个变量的语句都要和该变量的var定义处在同一代码段内,因此,我们得出以下结论:
使用var关键字定义过的变量,只影响于当前代码段,并不作用于整个实例,当该代码段结束的时候,这个变量会自动的从内存中删除掉。
我们大家所说的临时变量,其实就是就是以前直接定义的一些变量,并不加var和global关键词的修饰,其实这种说法是不对的,我们可以认为,在GM中存在于四种类型的变量:
1.使用关键词globalvar定义的全局变量;
2.不使用任何关键词所定义在实例上的成员变量;
3.在变量名前加上global.的特殊的,定义在global上的成员变量;
4.使用关键词var定义的,只作用于当前代码段上的临时变量。
所谓的成员变量,只得就是该变量是影响整个实例的,在变量名使用global.这个比较特殊,可以称之其为成员变量,但是我认为,在这里为了让大家不要和globalvar发生无解,还是将它当作定义在global实例上的成员变量比较好,而且这个实例会全程存在于游戏中,它是一个比较特殊的实例。