近期成果
厂里有些忙,不过我在空闲时间也在尽力赶进度了,近期内写的任务安排基本全部完成。
- 写个解析CSV的脚本
- 找个一键EXCEL转化为CSV的工具
- 完成初步的EXCEL总表
- 完成初步的语言国际化
- 游戏状态栏改成手机的一行形式
- 参考大项目的分类方式整理文件
接下来大致给大家简单介绍一下近期成果。
CSV解析器
首先是CSV解析脚本……我参考了视频Godot用表格的方式制作物品信息 - bilibili
不过视频中把类型和类名混在一起了,不太方便,也不直观,我改成了读取第二行作为数据类型的判断依据。并且我做的是文字游戏,用的图不多……目前暂时把图片解析的部分注释掉了,还有就是加上了一些必要的判断和操作,以免出错。
最后代码如下:
extends Object
func load_csv(csv_path: String):
var file: FileAccess = FileAccess.open(csv_path, FileAccess.READ)
var header: PackedStringArray = file.get_csv_line(",")
var types: PackedStringArray = file.get_csv_line(",")
var items = []
if not file:
print("%s 文件打开失败", csv_path)
return
while file.get_position() < file.get_length():
var csv_item: PackedStringArray = file.get_csv_line(",")
var row: Dictionary = {}
for i in range(header.size()):
var title = header[i]
var value = csv_item[i]
var type_str = types[i]
# 根据第二行的字符串转化为相应类型
match type_str:
"str": row[title] = value
"int": row[title] = value.to_int()
"flo": row[title] = value.to_float()
_: row[title] = value
items.append(row)
file.close() # 读取完成后关闭文件
#for i in range(items.size()):
## 获取字典icon_x的值,负责定位纹理切图x轴位置
#var x = items[i]["icon_x"]
## 获取字典icon_y的值,负责定位纹理切图y轴位置
#var y = items[i]["icon_y"]
## 创建切图纹理
#var tex = AtlasTexture.new()
## 将预加载的纹理赋值到新创建的切图纹理上
#tex.atlas = CSV_ITEM_ICON
## 设置切图大小
#tex.region.size = Vector2(16, 16)
## 设置切图定位
#tex.region.position = Vector2(x * 16, y * 16)
## 赋值到节点纹理上
#get_child(i).texture = tex
return itemsEXCEL转化器
我没构建Python环境,所以用不了更方便的脚本,只好找了个软件来实现类似功能:Excel格式转换器 - 吾爱
不过也没差,反正效果一样的,软件很好用,我可以直接在一个总表里方便的管理我的所有可以使用CSV储存的游戏数据,直观方便,还能利用EXCEL强大的汇总、查询、整理功能。
就比如下图,转化后会生成language、talent等CSV文件,真的很方便。在这里也感谢一下吾爱老哥的无私分享。
语言国际化
实装了切换语言的功能。
不过,为了界面显示的简洁,我没做可供玩家选择语言的二级界面,而是采用了点一下切换一次的设计。

角色状态栏
之前用的是占据空间比较多的方式,后面手机用着用着发现……好像手机状态栏的样式就挺不错,然后就改成了现在这种。
采用一栏式布局,时间等信息和手机布局一致,电量的位置则替换为生命。
至于设置选项则从界面里删掉了,改为了游戏机制。玩家需要回到家园并使用特殊道具才可调整,例如:使用世界之声道具,可以调整游戏音量。
文件夹整理
目前我大致遵循以下两个原则:
res目录(也就是初始目录)的文件夹尽可能的少,这样比较美观。
我大致分成了:Assets、Entity、Procedure三大类,分别对应游戏资产、玩家可互动的实体、程序。然后在这三大类我又会划分为很多个具体的小类,例如Procedure下有个scene(界面),然后界面里有个menu(主菜单)文件夹,里面就存放着一些和这个界面相关的文件,具体有啥详见下一个原则。
文件分类按照模块化的思路进行储存。
原本我是按类型来存放资源的,也就是脚本放一个文件夹、主题放一个文件夹、界面又放另一个文件夹……这样倒是整齐了,但是找东西的时候很不方便,经常要点开好几个文件夹去找对应的脚本和界面。而现在我按照模块化思路直接放一起,用上面那个menu文件夹举例,这里面有menu菜单的界面、脚本、主题等各个和menu相关的东西。
版权声明:本文采用 CC BY-NC 4.0 协议授权
转载需注明作者及原文链接: https://mansifield.pages.dev/pbhi6l/