使用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. 计算几何-Minimum Area Rectangle II

    2020-02-10 21:02:13 问题描述: 问题求解: 本题由于可以暴力求解,所以不是特别难,主要是用来熟悉计算几何的一些知识点的. public double minAreaFreeRect ...

  2. centos7 LVM扩容案例

    测试数据 cd / && dd if=/dev/zero of=file bs=1M count=10000 将磁盘变大的测试命令. 生产环境不要用. 这只是用于测试扩容后的效果 LV ...

  3. intern()方法的使用

    intern() intern方法的作用是:如果字符串常量池中已经包含一个字符串等于此String对象的字符串,则返回常量池中的这个String对应的对象, 否则将其添加到常量池并返回常量池中的引用. ...

  4. java 实现全排列

    public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = n ...

  5. Kullback-Leibler(KL)散度介绍

    在这篇文章中,我们将探讨一种比较两个概率分布的方法,称为Kullback-Leibler散度(通常简称为KL散度).通常在概率和统计中,我们会用更简单的近似分布来代替观察到的数据或复杂的分布.KL散度 ...

  6. Linux/CentOS7搭建Anaconda运行环境

    1. 安装miniconda 下载并安装miniconda到$HOME/.miniconda/ #从官网下载 wget -c "https://repo.anaconda.com/minic ...

  7. FastDFTJava客户端使用

    1.1.java客户端 余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知.而且已经很久不维护了. 这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot ...

  8. Java 运行时数据区

    写在前面 本文描述的有关于 JVM 的运行时数据区是基于 HotSpot 虚拟机. 概述 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...

  9. 《Three.js 入门指南》3.1.1 - 基本几何形状 -圆环面(TorusGeometry)

    3.1 基本几何形状 圆环面(TorusGeometry) 构造函数 THREE.TorusGeometry(radius, tube, radialSegments, tubularSegments ...

  10. Java学习笔记--Arrays

    Arrays(数组工具类)常用方法 Arrays.toString(int[] a)方法  ------->  返回类型为String,可以用来产生数组的可打印表示,避免了用循环依次读取数组值进 ...