欢迎光临散文网 会员登陆 & 注册

《G SRPG》项目讲解(一) Level&Map

2022-08-20 06:17 作者:DH_DoveG  | 我要投稿

《G SRPG》是使用Godot游戏引擎制作的一个【SRPG】类型的项目。该项目的源码可访问:https://www.aliyundrive.com/s/XY2qHQwGK26 获取。这个专栏主要是说说我在制作《G SRPG》时的想法与思路。

棋盘是SRPG的基础要素之一。本文简要分享我在制作《G SRPG》的实现思路。

关于棋盘:

在此项目中,棋盘的场景及组件都存放在了【Map】文件夹下。文件结构如下:

Map目录下的文件结构

虽然说该文件夹下的文件比较多(而且分类做得不好),但核心组件只是如下几项:

Sub.tscn :选中下标。非常重要的一个组件(因为该项目设计上操作是全键盘的)。

Clicks.gd :提供可让Sub选中的区域。

Map.gd :管理绘制的TileMap

Units.gd :管理棋子的增减与行动系统(此项目中以棋子的速度决定行动顺序)

Level.tscn :初始化组件

下面来介绍Level与Map:

Level.tscn

level

level的作用主要是做组件的初始化工作。

设置了三个变量方便设计关卡:

winNextScene :获胜后载入的场景

loseNextScene :失败后载入的场景

joinUnitNum :可以参加战斗的棋子的人数,这与另外一个场景(Plan)有关,此处不介绍。


Map.gd

这脚本主要提供了用于棋子寻路的A*算法用于显示棋子可以抵达的区域的洪水算法

obsSet :为了方便修改障碍物与设置经过障碍物所消耗的代价。以key为图块下标;value为经过代价。如果代价是1以下的数值将是不可穿越的。

这函数会在棋子使用攻击时调用

前面有几段是转换棋子们的坐标

此函数使用了 MakeGrid.gd ,关于这个可以看我之前的视频。显示攻击区域的话,不在Map中调用也是没有问题的,不过在写的时候,考虑到可能后续会有什么“不能隔着障碍物攻击目标”的攻击模式所以就就将攻击的显示可攻击区域的函数放到了Map中。

黄色区域为可攻击区域

当前的设计来说,无论攻击区域上有没有障碍物都是可以显示攻击区域。

接下来就是移动了,移动的话,一般显示移动都是一个范围,这个可以使用洪水算法这个我也是在搜索后才知道的,所以有问题果然还是马上搜索一下比较好。

使用洪水算法获得可以抵达的区域

这里在写的时候,我做了将得到的范围减去内圈只保留最外面一圈的操作,这一段没有什么愿意,即使删掉减去内圈的代码也没有什么影响。

蓝色区域为生成可以移动到的区域

既然现在有区域了,那接下来就需要让棋子移动到一个位置上去,这个项目中使用的是A*,我在这个项目中得到,大家可以去看载看一下。

说点闲话

这是第一次写这种东西,写得不好请见谅。


《G SRPG》项目讲解(一) Level&Map的评论 (共 条)

分享到微博请遵守国家法律