撰写了文章 更新于 2018-07-13 12:26:33
GML学习手记 六点一
好的继续,这次就继续来更新关于检测按键状态的函数的内容吧。emmmmm,这一章就有点难分节了。可能会有点乱。那么,开始吧。
第一部分
1、keyboard_check
返回当前是否按住键盘上的给定键。这个其实挺好理解,下面是它的最基本的形式:
keyboard_check(key);
这里面的key指代的就是我们想检测的那个按键,检测后返回true或false。但是,非常值得注意的是,这个函数在按键被按住的每一帧都会返回一个值!!!嗯,一定要记住这个,我以前就应为不知道这个,就非常的搞笑,简直丢人啊。(在下面会介绍按下只检测一次的函数。)
接下来,来看一下这个函数的运用吧:
if keyboard_check(vk_left)
{
x -= 5;
}
上述代码也很好理解,当检测到左键被按下的时候,每一帧都会往左移5个单位。
2、keyboard_check_direct
这个东西啊,官方说的是通过硬件(这里就是指键盘啦)直接检测是否按下特定的按键来返回值,这里这个特定的按键我不是很理解,但是应该就是我的上一篇手记中的第二个小表格中列出来的那6个只能和keyboard_check_direct搭配使用的那几个变量了。下面还是看最简单的形式:
keyboard_check_direct(key);
注意:只适用于Windows,我没有用过,所以不是特别清楚。
下面是具体的例子:
if keyboard_check_direct(vk_ralt) || keyboard_check_direct(vk_lalt)
{
crouch = true;
}
上述代码也很好理解,当检测到左(或者右)边的alt键被按下的时候,将变量crouch设置为true。
3、keyboard_check_pressed
这个呢,就是检测按键是否被按下,但是和keyboard_check函数不同的是,它只检测一次!没错,就只有一次,想要再次检测的话,就要松开再按一次。仍然先看基本的样子:
keyboard_check_pressed(key);
再来看具体的例子:
if keyboard_check_pressed(vk_anykey)
{
room_goto_next();
}
上述的代码就是当键盘上的任意一个键被按下的时候,就会跳转到下一个room(场景),就很类似于那种“按下任意键继续”的那种提示。
4、keyboard_check_released
和上面那个很像,就是检测按键是否被松开。同样也是只能检测一次,如果要再次检测的话,就要先按下去再松开。基本样子:
keyboard_check_released(key);
然后是具体的例子:
if keyboard_check_released(ord('P'))
{
instance_create(0, 0, obj_Pause);
}
上述代码检测“P”键是否被松开,如果被松开的话就创建一个obj_Pause实例。
第二部分
1、keyboard_get_map
这个函数返回能够返回这个按键所映射的ascii码。一般用于检测它是否已经被映射。接下来就是最简单的样子:
keyboard_get_map(key);
然后,还是看具体的例子:
if keyboard_get_map(ord("A")) = ord("A")
{
keyboard_set_map(ord("A"), keyboard_lastkey);
}
上述代码先检查“A”键是否已映射到另一个键,如果没有映射,则将映射到下面一个按下的键。
2、keyboard_get_numlock
这个函数感觉也是意义不明啊,就是当数字键盘锁着的时候返回true,反之返回false。当然了,也是只能在Windows当中使用。还是看最基本的样子:
keyboard_get_numlock();
下面是运用:
if keyboard_get_numlock()
{
keyboard_set_numlock(0);
}
else
{
keyboard_set_numlock(1);
}
上述代码就很无聊,如果检测到数字键盘开着的就把它锁了,锁着的话,就开起来。这个例子可真是闲的没事啊。
3、keyboard_key
这个函数呢用来存储正在使用的按键,这个感觉和keyboard_check有一点像,但是他需要运用到别的地方去。接下来先看最简单的样子:
keyboard_key;
当我们使用它时,我们能够获取当前按下的按键的ascii码,但如果检测完成时没有按下任何键则返回0。
接下来就是具体的例子:
switch (keyboard_key)
{
case vk_numpad1: gun = weapon[0,0]; break;
case vk_numpad2: gun = weapon[1,0]; break;
case vk_numpad3: gun = weapon[2,0]; break;
}
上述的代码就是1、2、3键的切枪嘛。(笑)
4、keyboard_key_press
这个函数可以模拟任何一个按键的按下状态。这个函数接受vk_常量,标准键和ascii码。并且不返回任何值。接下来看看它最简单的样子:
keyboard_key_press(key);
然后还是来看具体的例子:
keyboard_key_press(vk_space);
上述代码模拟一个空格键被按下。
5、keyboard_key_release
这个函数可以模拟任何一个按键的被松开的状态。这个函数接受vk_常量,标准键和ascii码。并且不返回任何值。接下来看看它最简单的样子:
keyboard_key_release(key);
然后还是来看具体的例子:
keyboard_key_release(vk_space);
上述代码模拟一个空格键被松开。
小结
最后再凑一个小结,本片内容呢有点多有点乱,但是不难,就看要怎么运用了。暑假到了更新会稍快一点。
目录