使用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的八方向自动寻路的更多相关文章

  1. GameUnity 2.0 文档(三) 纸片人八方向

    DirectSprite类 有别于 上篇文档出现的 AnimationSprite类 (从头播放到尾) 这个类根据 path的图,如果是 8*8 64个图 八方向,可以设置长宽和 角度 角度 代表 8 ...

  2. 【Cocos2d-Js实战教学(1)横版摇杆八方向移动】

    本教程主要通过搭建一个横版摇杆八方向移动的实例,让大家如何用Cocos2dx-Js来做一款游戏,从基础了解Cocos2dx-Js的基本实现原理,从创建工程,到各个知识点的梳理. 教程分为上下两讲: 上 ...

  3. unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色

    在写第三人称控制的时候,一开始在电脑测试是用WASD控制角色 后来需要发布到手机上,于是就加了一个摇杆 键盘控制角色的代码已经写好了,角色八方向移动 如果按照传统的大众思路来控制的话,是达不到我想要的 ...

  4. 一个高效的A-star寻路算法(八方向)(

    这种写法比较垃圾,表现在每次搜索一个点要遍历整个地图那么大的数组,如果地图为256*256,每次搜索都要执行65535次,如果遍历多个点就是n*65535,速度上实在是太垃圾了 简单说下思路,以后补充 ...

  5. POJ 2386 Lake Counting 八方向棋盘搜索

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 53301   Accepted: 26062 D ...

  6. egret 简单的四方向的a星寻路,在wing中可以直接跑

    /** * main类中加载场景 * 创建游戏场景 * Create a game scene */ private createGameScene() { MtwGame.Instance.init ...

  7. 自己来实现一个简易的OCR

    来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...

  8. 一步一步开发Game服务器(五)地图寻路

    目前大多数使用的寻路算法有哪些? 目前市面上大部分游戏的寻路算法是A*,或者B*. A*通常所说的是最优算法也就是寻找最短路径.B*碰撞式算法也就是,也就是不断的去碰撞能走就走,不管是不是绕路.当然以 ...

  9. 【Mutual Training for Wannafly Union #1 】

    A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如 ...

随机推荐

  1. 动态规划-LCS-Uncrossed Lines

    2020-02-11 21:14:18 问题描述: 问题求解: 本质就是LCS. public int maxUncrossedLines(int[] A, int[] B) { int len1 = ...

  2. 【翻译】如何使用 OpenVINO 来优化 OpenCV

    本文翻译自 Vishwesh Shrimali 的  "Using OpenVINO with OpenCV" 原文链接: https://www.learnopencv.com/ ...

  3. [noip模拟]心<并查集>

    背景描述: 不是一切深渊都是灭亡 不是一切灭亡都覆盖在弱者的头上 ——<这也是一切> 舒婷 有N个透明的盒子, 每个盒子里面有两个不同颜色的球, 总共有M种颜色. Alice和Bob又在玩 ...

  4. 宝塔phpmyadmin可能问题及解决方法

    1. 端口问题检查宝塔phpmyadmin的默认端口888是否放行,和在服务器的安全组规则有没有添加888端口 2.phpmyadmin的php版本问题 在phpmyadmin的设置里的版本选择php ...

  5. redis 练习

    redis-server启动服务 redis-cli 进入redis redis 常用的keys键操作: exists key  ---检查key是否存在 del key1 key2 ---删除指定的 ...

  6. MySql 分组函数

    #二.分组函数/*功能:用作统计使用,又称为聚合函数或统计函数或组函数 分类:sum 求和.avg 平均值.max 最大值 .min 最小值 .count 计算个数 特点:1.sum.avg一般用于处 ...

  7. linux 访问windows 共享文件

    用到的方法是 CIFS (Common Internet File System)windows自己的网络文件系统 操作系统: Linux为 debian. Windows 为 windows 8   ...

  8. mysql 5.7.18安装教程

    安装之前 确认是否已安装旧版mysql.如有,则卸载(注意需要的数据备份). /etc/init.d/mysqld stop yum remove mysql mysql-* rm -rf /var/ ...

  9. 性能测试环境搭建:XAMPP1.8+PHPwind9.0安装教程

    1.安装准备 1.1软件版本 XAMPP的版本:XAMPP 1.8.2 phpwind的版本:PHPWind 9.0   1.2.安装环境 我的环境:win10 其实安装环境影响不大,win7,win ...

  10. 第一讲:Git分区,配置与日志

    前言 曾经听到过这样一句话:不会git就不要敲代码了.细细品味确实有其中的道理,可能是当事人代码被强行覆盖后的叹息吧! 因此,为了避免这种情况,接下来我们就一起来好好学习git的相关知识吧!不怕你不会 ...