使用GML的八方向自动寻路
使用GML的八方向自动寻路
本教程适合无基础人员使用.
提示
本教程中仅使用了最简单的方法,并且有一些错误和不规范之处。请谅解一下,在评论区提出,我会修改。古人曰“教学相长”,希望大家和我一起学习,一起进步!
效果展示

八方向自动寻路
原理阐述
- 玩家单击
- 创造路径
- 添加寻路到路径
- 沿路径运动
- 绘制精灵和路径
具体实现
- 添加两个精灵:
- spr_player
- spr_block
其中spr_player的原点需要设为中心。
- 添加两个物体:
- obj_player
- obj_block
- 进入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)
- 进入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)
}
- 进入obj_player的绘制事件
draw_sprite(spr_player,0,x,y)
draw_path(lj,x,y,1)
- 在房间内随机放置你想要的障碍物。
- 随手保存。
- 按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)
分别是画精灵和路径
总结
主要是掌握路径和寻路函数的简单使用
注释
- 添加障碍物时,可以使用父对象。
- 如果把步骤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);,就变成了四方向自动寻路。 - 本文所用源码已提供附件下载。可前往http://gamemake.org/post-update-17540.htm下载。
其他
本文首发于Gamemaker开发者之家,未经允许禁止转载。博客园是Tesla本人发布的!
商业合作请联系rainbowstesla@gmail.com或rainbows666@foxmail.com。
使用GML的八方向自动寻路的更多相关文章
- GameUnity 2.0 文档(三) 纸片人八方向
DirectSprite类 有别于 上篇文档出现的 AnimationSprite类 (从头播放到尾) 这个类根据 path的图,如果是 8*8 64个图 八方向,可以设置长宽和 角度 角度 代表 8 ...
- 【Cocos2d-Js实战教学(1)横版摇杆八方向移动】
本教程主要通过搭建一个横版摇杆八方向移动的实例,让大家如何用Cocos2dx-Js来做一款游戏,从基础了解Cocos2dx-Js的基本实现原理,从创建工程,到各个知识点的梳理. 教程分为上下两讲: 上 ...
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
在写第三人称控制的时候,一开始在电脑测试是用WASD控制角色 后来需要发布到手机上,于是就加了一个摇杆 键盘控制角色的代码已经写好了,角色八方向移动 如果按照传统的大众思路来控制的话,是达不到我想要的 ...
- 一个高效的A-star寻路算法(八方向)(
这种写法比较垃圾,表现在每次搜索一个点要遍历整个地图那么大的数组,如果地图为256*256,每次搜索都要执行65535次,如果遍历多个点就是n*65535,速度上实在是太垃圾了 简单说下思路,以后补充 ...
- POJ 2386 Lake Counting 八方向棋盘搜索
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 53301 Accepted: 26062 D ...
- egret 简单的四方向的a星寻路,在wing中可以直接跑
/** * main类中加载场景 * 创建游戏场景 * Create a game scene */ private createGameScene() { MtwGame.Instance.init ...
- 自己来实现一个简易的OCR
来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...
- 一步一步开发Game服务器(五)地图寻路
目前大多数使用的寻路算法有哪些? 目前市面上大部分游戏的寻路算法是A*,或者B*. A*通常所说的是最优算法也就是寻找最短路径.B*碰撞式算法也就是,也就是不断的去碰撞能走就走,不管是不是绕路.当然以 ...
- 【Mutual Training for Wannafly Union #1 】
A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如 ...
随机推荐
- 洛谷 P5658 括号树 题解
原题链接 简要题意: 求出以从每个节点到根形成的括号序列的合法对数. 算法一 观察到 \(n \leq 8\) ,所以我们可以用 纯粹的暴力 . 用 \(O(n)\) 时间得出当前节点到根的字符串. ...
- 题解 P4302 【[SCOI2003]字符串折叠】
讲讲我的做法 题目大意:对一个字符串进行折叠是它长度最小 看一眼数据范围:哇!字符串长度不超过100!这是一道省选题,不可能给你太宽裕的时限,所以,题目基本暗示你要用\(n^{3}\)多一些的算法复杂 ...
- 数学-概率-New 21 Game
2020-02-10 13:24:26 问题描述: 问题求解: 第一次看到这个题目的时候想到的是之前做过的一条概率题,就是那个国际象棋,那条题目的做法是使用dp去对所有留在棋盘的种类进行计数,然后除以 ...
- springboot使用swagger2创建文档
一.导入swagger2依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>spri ...
- 硬货 | 手把手带你构建视频分类模型(附Python演练))
译者 | VK 来源 | Analytics Vidhya 概述 了解如何使用计算机视觉和深度学习技术处理视频数据 我们将在Python中构建自己的视频分类模型 这是一个非常实用的视频分类教程,所以准 ...
- (线段树 -星星等级)Stars POJ - 2352
题意: 给出n个星星的坐标 x,y ,当存在其他星星的坐标x1,y1满足x>=x1&&y>=y1时 这个星星的等级就加1. 注意: 题中给的数据是有规律的 ,y是逐渐增加的 ...
- 通过ISAPI http协议控制海康摄像头
一直用海康的SDK进行摄像头控制,但有时候非常不灵活,必须有X86的主机,在嵌入式上面就不行,通过写一个HTTPCLIENT可以通过ISAPI来控制海康的摄像头. 代码如下:git@github.co ...
- 解析Tomcat构成及运行原理
本文的知识点分为: Server.Service.Connector.Container四大组件之间的关系和联系,以及他们的主要功能点: Tomcat执行的整体架构,请求是如何被一步步处理的: Eng ...
- 使用内部枚举类作为外部类的参数的Mybatis的参数该如何判断
新写了一个接口,期望根据不同的参数来给数据库中不同的字段进行传值.这里使用了内部静态枚举类的方式进行传值,在写mybatis动态sql时,如果是普通对象,一般使用,那么使用枚举类,如何判断枚举类的值呢 ...
- 操作系统-IO与显示器
1. 让外设工作起来 只要给相应的控制器中的寄存器发一个指令 向设备控制器的寄存器写不就可以了吗? 需要查寄存器地址.内容的格式和语义.操作系统需要给用户提供一个简单视图---文件视图,这样方便 总的 ...