云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > gamemaker函数中文帮助

gamemaker函数中文帮助

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 0:26:10

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 为卷动前离原点多远时实例必须离开房间。等于围绕房间的一圈留白。这个函数在离开事件( outside event )中使用非常具有代表性。

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 当前路径的前一个位置。可以使用碰撞事件( collision events )里的例子来设置在路径上位置使它回到前一个位置。

path_speed 设置跟随路径的速度(像素每步)。负值时向后移动。

path_orientation 路径处理时的方位(逆时针)设定。值 0 时为正常方向。 path_scale 缩放路径。增加值使路径变大。 1 是默认值。

path_endaction 路径结束时必须执行的行为。可以使用最上面的函数介绍的值 。

运动设计

运动设计帮助你在避免与另一实例(比如:墙)碰撞的情况下将某实例从给定位置移动到另一位置。运动设计是一个有难度的项目。几乎不可能给出一些能够在任何情况下正常运作的普通函数。同时,计算碰撞运动非常耗费系统资源。所以使用这些函数时必须非常小心仔细。当你使用以下任一函数时请将这些建议记到心里。

Game Maker 提供了一些不同形式的运动计划。最简单的形式允许一个实例朝某特定目标方向步进,可能的话尽量走直线但是如果有要求的话可以取不同的方向。这些函数应当在实例的并行事件 (step event) 中使用。对应的运动计划动作库也是可用的 :

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 设得很大,实例就可以在每一步都改变很多方向。这样可以使它更简单的寻找一段短路径,但同时整个路径会变得非常丑陋(路线歪七歪八的 ? )。如果把值设得很小,路线就会很平滑但同时它可能会绕很远的路费很多时间(有时候甚至找不到到目标的路)。没有创建步时,实例的行为会建立在参数 onspot 上。如果 onspot 值为 true (或 1 ,为默认值),实例会根据 maxrot 的大小在自己的位置上旋转。如果值为 false (或 0 )实例就不再移动。如果实例为车辆时,设为 false 比较好,但同时会减少寻路成功的机会。 请注意 potential 函数只能使用局部信息。所以它只能在局部信息足够确定正确的运动方向时寻路成功。举例来说,走出迷宫就找不到路了(大部分情况下)。

第二种类型函数为实例计算路径是否碰撞。一旦路径经过计算,你可以分配给实例让它朝目标移动。计算路径会花一些时间但接下来完成路径会非常快。当然只会在其间情况没有改变时才有效。举例来说,如果障碍物改变了,你可能需要重新计算路径。再次注意,这些函数可能不起作用

开始的两个函数使用了线形运动,潜在域方法照例是用在 step 函数里的 。

mp_linear_path(path,xg,yg,stepsize,checkall) 这个函数使用指定步大小计算实例从当前位置到( xg , yg )的直线路径。使用步的方法和函数 mp_linear_step() 一样。指

定的路径必须已经存在并且会被新路径覆盖。(参考后面的章节怎样建立和销毁路径。)函数返回值为是否找到路径。函数在寻路失败前不会停止,开始和目标之间不存在直线路径为失败的情况。如果失败,路径仍然会被创建直到运行到实例到达封闭的位置。

mp_linear_path_object(path,xg,yg,stepsize,obj) 除了参数 obj 实例为障碍物,其他效果同上。参数 obj 可以是对象或是实例名。

mp_potential_path(path,xg,yg,stepsize,factor,checkall) 这个函数计算指定步大小让实例绕过障碍从当前位置和方向到( xg , yg )的路线。函数使用了潜在域步骤,类似于函数 mp_potential_step() 当然参数可以用函数 mp_potential_settings() 来设置。指定的路径必须已经存在并且会被新路径覆盖。(参考后面的章节怎样建立和销毁路径。)函数返回值为是否找到路径。为了避免函数不停的计算下去,你需要给出一个大于 1 的参数 factor 。如果找不到比开始和目标之间的距离更短的路径,函数就会停止并报错。参数 factor 为 4 是正常够用的值了,但是如果想绕远点的话可能需要加大数值。如果失败,路径仍然会被创建并且在目标方向运行,但是到达不了目标

mp_potential_path_object(path,xg,yg,stepsize,factor,obj) 除了参数 obj 实例为障碍物,其他效果同上。参数 obj 可以是对象或是实例名

另一些函数使用了更复杂的机构使用了一种基于网格的方法(有时候称它为 A* 算法)。寻路更容易成功(尽管还是有失败的可能)并且路线更短,缺点是需要很多操作。以下都是全局概念。首先我们在房间内放入一网格(相应的部分)。你可以选择精致的网格(较慢)或是粗糙的网格。接下来,我们要探测所有的相关对象与网格单元交叠的地方(不管是碰撞盒或是精确检测)并且对这些单元作禁止的标记。即使只是和障碍物部分交叠,单元会全部被标记为禁止通行。最后我们指定一个开始和一个目标位置(必须放在空白单元上),函数就会计算他们之间的最短路径(实际上是最接近最短路径)。路径会在中间空白的单元上行进。所以如果单元足够大到能在中心完全放下实例,函数就会成功。接下来你可以把这个路径给一个实例 。

基于网格的方法 十分强大(在很多专业游戏中使用)但是要求你仔细的考虑如何使用。你必须决定哪个区域以及单元大小比较合适。同样必须决定哪个对象必须避开并且决定精确检测是否必要。所有这些参数都强烈影响到寻路的效果。

特别需要注意,单元的大小十分重要。要记住单元必须要足够的大,大到能将移动的对象完全放入单元的中心。(注意对象原点的位置。同样要了解如果对象的原点不在它的中心,你就可以移动路径)另一方面,单元越小路径越容易存在。如果单元和障碍物之间的开口太大路径会闭合,因为所有的单元都和一个障碍物交叠。 基于网格方法的实际函数如下 :

mp_grid_create(left,top,hcells,vcells,cellwidth,cellheight) 这个函数建立网格。返回一个索引用于其它函数调用。你可以在同一瞬间创建并维持多重网格结构。参数 left 和 top 指定网格左上角的位置。参数 hcells 和 vcells 设置水平和垂直单元的数量。参数 cellwidth 和 cellheight 是单元的大小。

mp_grid_destroy(id) 销毁指定网格结构并释放空间。如果不再用到结构时记得调用这个函数。

mp_grid_clear_all(id) 将网格中的所有单元都标记为空。

搜索更多关于: gamemaker函数中文帮助 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

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(

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com