用额外的d保存2D游戏平台层平铺图的最佳方法

2024-09-29 23:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用我自己的Python/Pygame引擎制作一个2D平台,已经有了一个良好的开端。我还制作了一个关卡设计师,导出关卡牌地图,游戏将其导入,但我需要关联不同的东西,比如打开特定门的开关(或者更准确地说,保持特定门打开的压力板),但我的平铺图数组目前只保存平铺图像索引号。什么是最好的方法包括相关的瓷砖(如哪个开关打开哪个门等)?在

我需要用这些数据创建一个额外的文件吗?还是每个平铺都有2个值?我试过用google搜索,但没有真正覆盖到任何地方。我肯定有人有这种经历。。。我真的不想硬编码,因为我希望游戏尽可能多功能。在


Tags: 数据方法图像引擎游戏地图平台数组
2条回答

我会改变你的文件格式,从每2D单元存储一个tile索引到存储一些更复杂的数据对象。我的第一个想法是为每个单元创建一个字典,以获得最大的灵活性,但序列化和存储它将相当大。在灵活性和存储大小之间有一个折衷。在

另一个选择是使用NamedTuples为每个单元存储固定数量的参数,同时保持简洁的序列化。NamedTuples很好,因为它们让您可以非常简洁地表示数据对象,既可以很好地序列化,也可以使用命名字段进行查询。在

你需要问自己的问题是“我需要知道地图上每个单元格的元数据是什么”和“我有多在乎简洁的文件大小来表示它们”。在

我的问题的答案是由@BowlingHawk95发布的,它使用NamedTuples作为数据对象,这使我能够为每个单元格添加多个字段。我想发布一个示例来展示结果代码,以及我如何实现它的快照,以帮助其他人寻找相同的东西。在

# Initialise the level data array with NamedTuples;
# 'linked_point' is a tuple (x, y) for an associated cell - e.g. switch associated with a door:
Cell = namedtuple('Cell', ['image_id', 'linked_point'])
level_data = [[Cell(image_id=0, linked_point=(0, 0)) for _ in range(grid_width)] for _ in range(grid_height)]

现在我可以添加坐标了(比如linked_point),我现在可以引用我所在单元格中的另一个单元格。下图显示了我的关卡设计器的快照,标题栏中有坐标,还显示了链接单元格的图像名和坐标。在

Level Designer Linked Points

非常感谢@BowlingHawk95的帮助!在

相关问题 更多 >

    热门问题