gamemaker函数中文帮助doc.docx
《gamemaker函数中文帮助doc.docx》由会员分享,可在线阅读,更多相关《gamemaker函数中文帮助doc.docx(75页珍藏版)》请在冰豆网上搜索。
gamemaker函数中文帮助doc
常数
true等同于1.
false等同于0.
pi等同于3.1415...
实数函数
random(x)返回一个随机的实数,范围从0到x。
数值总小于x。
choose(val1,val2,val3,...)随机返回其中一个参数。
最多可以有16个参数。
abs(x)返回x的绝对值。
sign(x)返回x的符号(-1,0,或1)。
round(x)返回与x最接近的整数。
floor(x)返回比x小的最大整数。
ceil(x)返回比x大的最小整数。
frac(x)返回x的小数点以后的部分。
sqrt(x)返回x的开方。
x不能是负数。
sqr(x)返回x的平方。
power(x,n)返回x的n次方。
exp(x)返回x的冥方指数e。
ln(x)返回x的自然对数。
log2(x)返回x的2的对数。
log10(x)返回x的10的对数。
logn(n,x)返回x的n的对数。
sin(x)返回x的正弦(x单位为弧度)。
cos(x)返回x的余弦(x单位为弧度)。
tan(x)返回x的正切(x单位为弧度)。
arcsin(x)返回x的反正弦。
arccos(x)返回x的反余弦。
arctan(x)返回x的反正切。
arctan2(y,x)计算arctan(y/x),然后返回结果在正确象限内的角度值。
degtorad(x)转换角度到弧度。
radtodeg(x)转换弧度到角度。
min(val1,val2,val3,...)返回参数中的最小值。
最高支持16个参数。
必须全部是实数或全部是字符串。
max(val1,val2,val3,...)返回参数中的最大值。
最高支持16个参数。
必须全部是实数或全部是字符串。
mean(val1,val2,val3,...)返回所有参数的平均值。
最高支持16个参数。
必须全部是实数数值。
median(val1,val2,val3,...)返回参数的中间数(如果参数数目为偶数,则两个中间数中最小的那个作为返回值)。
最高支持16个参数。
必须全部是实数数值
point_distance(x1,y1,x2,y2)返回位置1(x1,y1)到位置2(x2,y2)的距离。
point_direction(x1,y1,x2,y2)返回从位置1(x1,y1)到位置2(x2,y2)的方向角度。
lengthdir_x(len,dir)返回指定长度及方向的矢量线在x轴上的投影长度。
lengthdir_y(len,dir)返回指定长度及方向的矢量线在y轴上的投影长度。
is_real(x)返回x是否为真实数值(否则就是字符串)。
is_string(x)返回x是否是一个字符串(否则就是一个真实数值)。
字符串处理函数
chr(val)返回字符串中包含参数指定的ASCII码字符的字符串。
ord(str)返回字符串中第一个字符的ASCII码。
real(str)将字符串转换为真实数值。
字符串可包含负号,小数点甚至是指数部分。
string(val)将真实数值转换为标准格式的字符串(整数时没有小数点位置,否则在小数点后留两位)。
string_format(val,tot,dec)将val以你自己的格式转换为字符串:
tot指定总的数字位置,dec指定小数点后有几位数字。
string_length(str)返回字符串中字符的个数。
string_pos(substr,str)返回字符串substr在字符串str中的位置(0代表完全不符)。
string_copy(str,index,count)返回字符串str的一部分,从index指定的位置开始,长度为count。
string_char_at(str,index)返回字符串str中索引为index的字符。
string_delete(str,index,count)返回删除了部分内容的字符串str,从index开始,长度为count。
string_insert(substr,str,index)返回在位置index处添加子串substr后的字符串str。
string_replace(str,substr,newstr)返回字符串str的一份拷贝,为字符串中子串substr第一次出现的地方开始被字符串newstr替换后的内容。
string_replace_all(str,substr,newstr)返回字符串str的一份拷贝,为字符串中子串substr所有出现的地方开始被字符串newstr替换后的内容。
string_count(substr,str)返回子串substr在字符串str中出现的次数。
string_lower(str)返回小写格式的字符串str。
string_upper(str)返回大写格式的字符串str。
string_repeat(str,count)返回由count个字符串str组成的新字符串str。
string_letters(str)返回只包含字母的字符串str。
string_digits(str)返回只包含数字的字符串str。
string_lettersdigits(str)返回包含字母和数字的字符串str。
以下为处理系统粘贴板内容的相关函数。
clipboard_has_text()返回粘贴板中是否存在任何文本。
clipboard_get_text()返回当前粘贴板内文本内容。
clipboard_set_text(str)将字符串str送入粘贴板。
日期及时间处理
在GameMaker中有许多函数是专门处理日期和时间的。
一个日期-时间格式是一组实数。
整数部分代表日期,最早到12/30/1899。
小数点后的部分代表一天之中的24小时。
现有有以下函数:
date_current_datetime()返回当前系统日期-时间。
date_current_date()返回当前系统日期(不包括时间)。
date_current_time()返回当前系统时间(不包括日期)。
date_create_datetime(year,month,day,hour,minute,second)建立一个指定的日期-时间数据。
date_create_date(year,month,day)建立一个指定的日期数据。
date_create_time(hour,minute,second)建立一个指定的时间数据。
date_valid_datetime(year,month,day,hour,minute,second)返回给定的日期-时间是否正确。
date_valid_date(year,month,day)返回给定的日期是否正确。
date_valid_time(hour,minute,second)返回给定的时间是否正确。
date_inc_year(date,amount)返回指定日期后amount年的新日期。
amount必须为整数
date_inc_month(date,amount)返回指定日期后amount月的新日期。
amount必须为整数。
date_inc_week(date,amount)返回指定日期后amount星期的新日期。
amount必须为整数
date_inc_day(date,amount)返回指定日期后amount天的新日期。
amount必须为整数。
date_inc_hour(date,amount)返回指定日期后amount小时的新日期。
amount必须为整数。
date_inc_minute(date,amount)返回指定日期后amount分钟的新日期。
amount必须为整数。
date_inc_second(date,amount)返回指定日期后amount秒的新日期。
amount必须为整数。
date_get_year(date)返回date对应的年份。
date_get_month(date)返回date对应的月份。
date_get_week(date)返回date对应的星期。
date_get_day(date)返回date对应的天数。
date_get_hour(date)返回date对应的小时。
date_get_minute(date)返回date对应的分钟。
date_get_second(date)返回date对应的秒。
date_get_weekday(date)返回date对应一星期的哪一天。
date_get_day_of_year(date)返回date对应一年中的哪一天。
date_get_hour_of_year(date)返回date对应一年中的哪一小时。
date_get_minute_of_year(date)返回date对应一年中的哪一分钟。
date_get_second_of_year(date)返回date对应一年中的哪一秒。
date_year_span(date1,date2)返回两个日期date1和date2之间相隔多少年。
此函数只报告年数片断。
date_month_span(date1,date2)返回两个日期date1和date2之间相隔多少月。
此函数只报告月份片断。
date_week_span(date1,date2)返回两个日期date1和date2之间相隔多少星期。
此函数只报告星期片断。
date_day_span(date1,date2)返回两个日期date1和date2之间相隔多少天。
此函数只报告天数片断。
date_hour_span(date1,date2)返回两个日期date1和date2之间相隔多少小时。
此函数只报告小时片断。
date_minute_span(date1,date2)返回两个日期date1和date2之间相隔多少分钟。
此函数只报告分钟片断。
date_second_span(date1,date2)返回两个日期date1和date2之间相隔多少秒。
此函数只报告秒数片断。
date_compare_datetime(date1,date2)比较两个日期时间的大小,返回-1,0,1,分别代表前者小于,等于,大于后者。
date_compare_date(date1,date2)比较两个日期的大小,返回-1,0,1,分别代表前者小于,等于,大于后者。
date_compare_time(date1,date2)比较两个时间的大小,返回-1,0,1,分别代表前者小于,等于,大于后者。
date_date_of(date)返回指定日期-时间数据的日期部分,时间部分设定成0。
date_time_of(date)返回指定日期-时间数据的时间部分,日期部分设定成0。
date_datetime_string(date)按照给定的数据,返回系统默认的字符串格式日期-时间。
date_date_string(date)按照给定的数据,返回系统默认的字符串格式日期。
date_time_string(date)按照给定的数据,返回系统默认的字符串格式时间。
date_days_in_month(date)返回指定日期-时间所在月份的天数。
date_days_in_year(date)返回指定日期-时间所在年份的天数。
date_leap_year(date)返回指定日期-时间所在年份是否为闰年。
date_is_today(date)返回指定日期-时间是否为今天。
移动
很明显,游戏的一个重要方面就是对象实例的四处移动。
每个实例拥有两个内建的变量x和y用来指出实例的位置。
(更精确的说,它们显示的位置是精灵原点摆放的位置。
)(0,0)的位置在房间的最左上角。
你可以通过改变实例x和y变量的值来改变实例的位置。
你如果想要对象进行复杂运动,这是个可行的方法。
把有关的代码放在对象的并行(step)事件里。
如果对象以固定方向及恒速移动,实现起来就很简单。
每个对象实例都有一个水平速度(hspeed)和一个垂直速度(vspeed)。
两个速度都是以像素每步(pixelsperstep)为单位。
一个正的水平速度就是向右的运动,负的水平速度意味着向左的运动。
正的垂直速度是向下,负的垂直速度是向上。
所以你必须给这些变量初始化(比如在创建事件里)使对象实例有一个恒速。
自定义运动的方法和之前不同,使用了方向(direction)(0-359度),和速度(speed)(必须是非负数)。
你可以设定并读取这些变量来自定义一个任意运动。
(内部处理实际上是把值转换成hspeed和vspeed。
)当然还有阻力(friction)和重力(gravity)和重力方向(gravitydirction)供你使用。
最后要说的是函数motion_add(dir,speed)用来给现有对象增加速度。
完整来说,每个实例由以下变量和函数来处理它们的位置和运动:
x对象的x坐标.
y对象的y坐标.
xprevious对象以前的x坐标.
yprevious对象以前的y坐标.
xstart对象在房间里的初始x坐标.
ystart对象在房间里的初始y坐标.
hspeed速度的水平部分,即水平速度.
vspeed速度的垂直部分,即垂直速度.
direction对象当前方向(0-360度,逆时针,0=朝右).
speed对象当前速度(像素每步).
friction当前阻力(像素每步).
gravity当前重力(像素每步).
gravity_direction重力方向(270朝下).
motion_set(dir,speed)以参数(方向,速度)设定运动.
motion_add(dir,speed)以参数(方向,速度)对当前运动做改变.
这儿有大量可利用的函数帮助你定义你的运动:
place_free(x,y)返回实例在(x,y)位置是否与固体实例碰撞的值。
这个函数用来在实际移动到新位置前检测。
place_empty(x,y)返回实例在(x,y)位置是否与任何东西碰撞的值。
所以这个函数还把非固体实例加入计算范围。
place_meeting(x,y,obj)返回实例在(x,y)位置是否与对象(obj)碰撞的值。
与obj对象的实例遇到时,函数返回真(true)。
也可以用实例名做obj参数,实例名都意味着是对象的一个实例。
place_snapped(hsnap,vsnap)返回实例是否与网格对齐的值。
//hsnap水平网格,vsnap垂直网格
move_random(hsnap,vsnap)移动实例到一个随机空闲并且是网格的位置,和其对应的动作效果一样。
move_snap(hsnap,vsnap)将实例对齐网格,和其对应的动作效果一样。
move_wrap(hor,vert,margin)离开房间到另一边时卷动实例。
参数hor为是否水平卷动(1或0)参数vert为是否垂直卷动(1或0)。
参数margin为卷动前离原点多远时实例必须离开房间。
等于围绕房间的一圈留白。
这个函数在离开事件(outsideevent)中使用非常具有代表性。
move_towards_point(x,y,sp)以速度(sp)朝(x,y)位置移动实例。
move_bounce_solid(adv)遇到固体实例反弹,和其对应的动作效果一样。
参数adv(1或0)为是否使用高级反弹,高级反弹将倾斜面加入计算范围。
move_bounce_all(adv)遇到所有实例反弹,不单单对固体反弹。
move_contact_solid(dir,maxdist)朝某方向移动实例直到接触固体对象。
如果在当前位置没有碰撞,实例在碰撞发生前将不停的移动。
如果当前位置已经发生碰撞了,实例就不再移动。
你可以指定移动的最大速(距离未定时可以使用负数)//dir设定方向,maxdist设定速度
move_contact_all(dir,maxdist)和上一个函数类似,不过这次接触到任何对象时都会停止,不单是固体对象。
move_outside_solid(dir,maxdist)朝某方向移动实例直到离开固体对象。
如果在当前位置没有碰撞,实例不移动。
你可以指定移动的最大速(距离未定时可以使用负数)//用于分开重叠的实例
move_outside_all(dir,maxdist)和上一个函数类似,不过这次是离开任何对象时都会停止,不单是固体对象。
distance_to_point(x,y)返回当前实例的碰撞盒离(x,y)的距离。
distance_to_object(obj)返回实例离最近的对象(obj)的距离。
position_empty(x,y)返回在(x,y)位置是否有任何实例的布尔值。
position_meeting(x,y,obj)返回(x,y)位置是否有实例obj的布尔值。
参数obj可以是对象,实例名,或是其他关键字等等
路径
在GameMaker里你可以定义路径并且命令实例跟随路径。
尽管你可以使用动作库,变量和函数可以使你更灵活的运用:
path_start(path,speed,endaction,absolute)为当前实例开始一段路径。
参数path是你想开始的路径名。
参数speed是跟随路径的速度。
负的speed意味着实例沿着路径往回移动。
参数edaction是设定当实例到达路径的终点时发生的事件。
有以下几个值可供使用:
0:
停止路径
1:
从开始点继续(如果路径没有闭合,直接跳到开始点)
2:
从当前点继续
3:
反转路径,改变速度的符号
参数absolute应该是true或是false(1或0)。
设为true时和路径是绝对的关系(absolute)。
设为false时路径和实例的当前位置是相关的关系(relative)为了更精确地设定,如果speed是正的,当前位置就是路径的开始点,路径沿着当前位置而行。
speed为负值时,当前位置就是路径的终点,路径沿着当前位置往后移动。
path_end()当前实例结束跟随路径。
path_index*当前实例跟随路径的索引。
你不可以直接改变它,必须使用上面的函数。
path_position当前路径的位置。
值为0时在路径的开始位置。
值为1时在路径的结束位置。
值必须在0到1之间。
path_positionprevious当前路径的前一个位置。
可以使用碰撞事件(collisionevents)里的例子来设置在路径上位置使它回到前一个位置。
path_speed设置跟随路径的速度(像素每步)。
负值时向后移动。
path_orientation路径处理时的方位(逆时针)设定。
值0时为正常方向。
path_scale缩放路径。
增加值使路径变大。
1是默认值。
path_endaction路径结束时必须执行的行为。
可以使用最上面的函数介绍的值。
运动设计
运动设计帮助你在避免与另一实例(比如:
墙)碰撞的情况下将某实例从给定位置移动到另一位置。
运动设计是一个有难度的项目。
几乎不可能给出一些能够在任何情况下正常运作的普通函数。
同时,计算碰撞运动非常耗费系统资源。
所以使用这些函数时必须非常小心仔细。
当你使用以下任一函数时请将这些建议记到心里。
GameMaker提供了一些不同形式的运动计划。
最简单的形式允许一个实例朝某特定目标方向步进,可能的话尽量走直线但是如果有要求的话可以取不同的方向。
这些函数应当在实例的并行事件(stepevent)中使用。
对应的运动计划动作库也是可用的:
mp_linear_step(x,y,stepsize,checkall)这个函数作用为让实例朝指定位置(x,y)直线步进。
每一步的大小由参数stepsize设置。
如果实例已经到位,实例不再移动。
如果参数checkall为true
(1),实例遇到任意对象的实例都不会停止。
如果为false(0),实例碰撞到另一固体实例时就会停止。
注意这个函数遇到障碍时不会试着绕路。
它只会简单的停止。
函数返回值为是否到达目标位置。
mp_linear_step_object(x,y,stepsize,obj)除了参数obj实例为障碍,其他效果同上。
参数obj可以是对象或是实例名。
mp_potential_step(x,y,stepsize,checkall)和先前的函数类似,这个函数也是让实例朝指定位置步进。
不同处是这个函数会试着绕过障碍物。
当实例快撞上某一固体实例(或任何实例,checkall为true时)时,会改变运动方向来避开实例并且绕开它。
这个方法不能保证有效,但是在大部分简单应用中会非常有效的让实例朝目标移动。
函数返回值为是否到达目标位置。
mp_potential_step_object(x,y,stepsize,obj)除了参数obj实例为障碍物,其他效果同上。
参数obj可以是对象或是实例名。
mp_potential_settings(maxrot,rotstep,ahead,onspot)先前的函数利用的一些参数可以使用这个函数改变。
以下方法都有全局性。
首先试着朝目标直线移动。
可以使用参数ahead(默认值为3)设置前面有多少步。
减少这个值意味着实例将在延后开始改变方向。
增加这个值意味着提前开始改变方向。
如果检测到将要碰撞,实例会开始朝向最佳方向,偏右或是偏左。
根据参数rotstep(默认值为10)的大小决定在多少步中改变朝向。
减少rotstep的值会使得实例有更多移动的可能性但速度也会更慢。
参数maxrot解释起来有一点难度。
实例有一个当前方向。
参数maxrot(默认值为30)为在一步里面允许改变当前方向的最大值。
所以说即使实例可以直线移动到目标,只要不超过改变方向的最大值,它就会这样执行。
如果你把maxrot设得很大,实例就可以在每一步都改变很多方向。
这样可以使它更简单的寻找一段短路径,但同时整个路径会变得非常丑陋(路线歪七歪八的…)。
如果把值设得很小,路线就会很