【秘密探索】GameMaker的潜在内容
gamemaker吧
全部回复
仅看楼主
level 13
--转自GameMaker开发者之家论坛www.gamemaker.cn(新域名是这么写的吧,嗯)
所谓潜在内容(The Potential),即GameMaker尚未在其帮助文档、官方网址等地方存在说明但在GameMaker中确实存在的一些内容。
2014年12月18日 14点12分 1
level 13
Potential 001:then
为了迎合开发者可能有的VB和Pascal、Delphi书写习惯,GameMaker里面有一个潜在的关键词then。用法为:
if expression then statement;//if-then的行语句
if(expression) then {statements;}//if-then的块语句
事实上then不具备任何执行含义,仅仅用于区分条件和条件内部的语句。
2014年12月18日 14点12分 2
level 13
Potential 002:第三种等号
相信有两种等号大家已经熟知:=和==,一些人甚至知道这两个等号有什么区别,一个是赋值一个是判等。实际上,还有一个鲜为人知的第三个等号—— := (长得好萌……~~)
有的人说,GML语言不够严谨,因为=能够兼容==的作用,但是事实上这种说法因为:=的存在就已经不严谨了,下面细说三个等号作用:
a = 0;//这是一个赋值语句,也可以在if内充当判等条件表达式
a := 0;//在Pascal中,这是一个赋值句
a == 0;//这是一个判等条件表达式,这个表达式不能独立成为语句
在C、C++、Delphi等语言中,=被视为赋值,==被视为判等。但是在Pascal中,:=被视为赋值,=则被视为判等。因此,一些不知道==和=区别的新手在if里面用=时其实也不算错,只能说他是按照Pascal写法写的。
但令人奇怪的是——:=亦可以用于判断句中且也表示判等,这才是真正GML不够严密的位置
2014年12月18日 14点12分 3
level 13
Potential 003:第二种不等于
在GameMaker:Studio的帮助文件中,提到了一种不等于的写法(!=),事实上,还有第二种不等号写法,是为了迎合Pascal、VB等书写习惯的用户而设定的,但是GameMaker尚未体现这个符号——<>
即:a!=0与a<>0含义等价。
但是据小道消息透露,该两种运算符的优先级上可能存在差异
2014年12月18日 14点12分 4
level 13
Potential 004:begin和end
事实上,对于有VB书写习惯的用户,他可能先发现了关键词end……
但是,这个end的含义与VB中关键词End的含义是不同的。
事实上,begin和end的含义非常单纯,他们就是左右大括号({....})
这种写法目的是迎合Pascal用户的书写习惯:
if(a == 0)
{
a+=1;
}
//等价于
if(a ==0)
begin
a+=1;
end;
这一点是于VB的end是不同的,顺带一提,GameMaker没有endif,这一点值得注意
2014年12月18日 14点12分 5
level 13
Potential 005:action函数
所谓action函数,即函数名形如action_...的函数.
除左右大括号(Begin of the block,end of the block)以及注释(Comment)以及代码(Execute a piece of code)动作以外,官方动作库内的所有动作都有其对应的action函数。
action函数并未在官方帮助文件有提及,而且,使用这类函数也没有自动补全及参数提示,但是,在GameMaker内置的函数总表里面能够看见他们的身影。他们能够等效对应的按钮执行动作。其参数顺序与其对应动作的参数顺序相同。
据分析及小道消息,这些函数很可能是被直接地应用于GameMaker的官方动作库内,以加密其动作的源码。
2014年12月18日 14点12分 6
level 13
Potential 006:file_open函数
文件打开函数,与file_close()对应,由于GameMaker6之前的版本已经不再常见,因此这个函数就压了箱底,无人问津,而其对立函数file_close()则保留了下来。
实际上也并非真正意义上的消失,而是分裂为两个分函数:file_text_open_...和file_bin_open_...
2014年12月18日 14点12分 7
level 13
Potential 007:神秘的-6
在GameMaker中,存在这些关键词常量(实质是常量,但是显示的时候和关键词用一套颜色)
self other all noone global local
这是众所周知的,他们用于代表某一类实例。作为常量,他们的字面值分别为:-1 -2 -3 -4 -5 -7
于是乎,一个明显的空缺便由此显现……-6君莫名其妙的丢了……
在GameMaker的常量库里面,也尚未找到这个神秘的-6
而根据这个值的排布,-6这个值对应的常量十有八九是存在的。本人猜测-6可能是无主变量所属的常量,不对应常量名(关于无主变量,请看T-Po 008)。
为此,我特地做了个实验:
我直接开了一个GameMaker的空工程,添加一个房间,然后Debug模式下运行。
这个时候我直接检测(-1).x、(-2).x、……、(-7).x和x,结果发现只有(-1).x、(-2).x、(-6).x和x有值且为0,而其余的几个值是检测不到的(ERROR)
而在这个状态下,(-1).x、(-2).x和x恰好都是无主变量,而(-6).x却完全吻合了上述三者的值。因此上述猜想可能成立
2014年12月18日 14点12分 8
level 13
Potential 008:无主变量
在GM的变量世界中,有全局变量、有临时变量、有局部变量……
全局变量是大家公用的,局部变量是私人定制的(只在这个物体下可以无前缀访问),而临时变量则是个钟点工而已(只在作用域下可用)
事实上,还存在着另一片财产——无主变量。无主变量不属于任何一个实例。甚至都不属于all和noone,其他物体不能以任意形式访问无主变量(如果T-Po 007的假想成立,则可以通过值-6来访问),也不能修改无主变量(经T-Po 007假想实验,即使该假想成立,仍不能修改无主变量)。
但是,有些时候你可能会无意的试图访问无主变量(注意试图访问,尽管尝试着去访问,但这个访问是不会成功的,尽管不会传来报错信息),比如在Room Creation Code中,无前缀的写出一个尚不曾出现过的变量(非内置变量),并试图为其赋值,这就是在试图访问无主变量,但是,这个变量的值尚未改变,而且即使成功地访问这个变量也很可能引发错误。
无主的自定义变量是没有字面值(ERROR)的,无主的内置变量则统一为0.
2014年12月18日 14点12分 9
level 13
Potential 009:cr_no常量
*只存在于GameMaker:Studio中
虽然在GameMaker:Studio中,为了迎合移动端而删去了大量只能在PC上使用的函数,但是PC的函数大部分仍然得到保留,比如window系列函数。
用户有的时候总会需要更改鼠标的显示状态(比如制作网站链接,你可能需要把光标改为小手形状……),这个时候就会用到window_set_cursor函数。
那么提到这些,就不得不提到cr系列常量,这些常量是专门为window_set_cursor函数准备的。
但是,有时候希望隐藏光标的时候,我们需要键入cr_none,我们刚拼到cr_no的时候,文字就变红了……
看来,这cr_no也是内置常量啊,不过……这一行仍然有错,而你在下面同时会看到这么一行语法错误信息:Obsoleted function or constant : cr_no
呀??cr_no常量向来也没出现过啊,怎么就直接Obsolete了呢??
而且,在F1的废除列表(Obsolete List)里面也没有看见它。于是,cr_no就变成了GMS一个自作多情的错误……
2014年12月18日 14点12分 10
level 13
本楼缓慢更新,允许其他发现潜在内容的用户进行补充(不要直接补充,可以私信我也可以在Q上密我来整合补充),顺便,求吧主来个精3Q
2014年12月18日 14点12分 11
level 13
2014年12月19日 13点12分 12
level 11
很好,还有image_single也是隐藏的,可以代替image_index和image_speed,顶楼主!
2014年12月19日 13点12分 13
对,这货!F1里面没有
2014年12月19日 14点12分
唔,感谢提醒,马上补充
2014年12月20日 01点12分
level 11
顺便问一下:
file_bin_open及以下函数怎么用?
就想用二进制加密
打开写入了一个字符串:
f=file_bin_open('xinjian/a',0)
file_bin_write_string(f,'zifucuan')
file_bin_close(f)
这样只写入了一个空格字符串进去,为什么???
原来是要写入zifucuan的,之前测试过只能成功写入了数字,只能小于10位数,为什么???
而且我明明按照教程上的做
file_bin_open(file,数值)
数值是打开的模式,0写入1读取2两者都
求助!
2014年12月19日 14点12分 14
我只能解释十位数那个,Gamemaker的整数最大支持十位数,再大就要溢出了
2014年12月21日 00点12分
回复 智_囊_小_太 :嗯 其实我最想了解的时二进制写入字符串,数字通常都不用
2014年12月21日 03点12分
level 13
Potential 010:image_single内置变量
这个不知为何,GM始终保持不给这个变量提示和介绍,但是image_single确实鲜鲜活活存在的。
image_single表示的含义即跳转到精灵的某一帧且停止播放,即image_single = 5的等价形式为:
image_speed = 0;
image_index = 5;
2014年12月20日 12点12分 15
此潜在内容感谢@Autukill 的说明,以及感谢@z123k5 的提醒。
2014年12月20日 12点12分
新知识,之前看到但是不明白运用 只知道与image_index有关 感谢。
2014年12月20日 14点12分
挖坟![委屈]
2014年12月22日 09点12分
1