使用GML的八方向自动寻路

Posted tesla-173

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用GML的八方向自动寻路相关的知识,希望对你有一定的参考价值。

使用GML的八方向自动寻路

本教程适合无基础人员使用.


提示

本教程中仅使用了最简单的方法,并且有一些错误和不规范之处。请谅解一下,在评论区提出,我会修改。古人曰“教学相长”,希望大家和我一起学习,一起进步!

效果展示

技术图片

八方向自动寻路


原理阐述

  1. 玩家单击
  2. 创造路径
  3. 添加寻路到路径
  4. 沿路径运动
  5. 绘制精灵和路径

具体实现

  1. 添加两个精灵:
    • spr_player
    • spr_block
      其中spr_player的原点需要设为中心。
  2. 添加两个物体:
    • obj_player
    • obj_block
  3. 进入obj_player的创建事件
lj=path_add();
xl=mp_grid_create(0,0,room_width/32,room_height/32,32,32);
mp_grid_add_instances(xl,obj_block,0)
  1. 进入obj_player的步事件
if(mouse_check_button_pressed(mb_left))
{
    mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,1);
    path_start(lj,7,0,1)
}
  1. 进入obj_player的绘制事件
draw_sprite(spr_player,0,x,y)
draw_path(lj,x,y,1)
  1. 在房间内随机放置你想要的障碍物。
  2. 随手保存。
  3. 按F5进行测试。

如果只是需要这个功能,到此就可以结束了。


代码解释

lj=path_add();

添加一条路径。

xl=mp_grid_create(0,0,room_width/32,room_height/32,32,32);

初始化寻路

mp_grid_add_instances(xl,obj_block,0)

将obj_block添加到障碍物

mouse_check_button_pressed(mb_left)

检查鼠标左键是否按下

mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,1);

添加一个寻路

path_start(lj,7,0,1)

沿路径开始运动

draw_sprite(spr_player,0,x,y)
draw_path(lj,x,y,1)

分别是画精灵和路径

总结

主要是掌握路径和寻路函数的简单使用

注释

  1. 添加障碍物时,可以使用父对象。
  2. 如果把步骤4:obj_player步事件中的mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,1);改成mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,0);,就变成了四方向自动寻路。
  3. 本文所用源码已提供附件下载。可前往http://gamemake.org/post-update-17540.htm下载。

其他

本文首发于Gamemaker开发者之家,未经允许禁止转载。博客园是Tesla本人发布的!

商业合作请联系rainbowstesla@gmail.com或rainbows666@foxmail.com。

以上是关于使用GML的八方向自动寻路的主要内容,如果未能解决你的问题,请参考以下文章

(c++)迷宫自动寻路-队列-广度优先算法-附带寻路打印动画

避免Android在方向更改时自动重新添加我的片段

GML 图层以更改的旋转显示

使用A*寻路小记

GML:有没有一种简单的方法可以查看一行代码的输出?

Unity自动寻路问题