簡體   English   中英

用額外數據保存2D Pygame Platformer級別切片地圖的最佳方法

[英]Best way to save a 2D Pygame platformer level tile map with extra data

我正在使用我自己的Python / Pygame引擎制作2D平台游戲,並且有了一個良好的開端。 我還制作了一個關卡設計器來導出關卡圖,然后游戲將其導入,但是我需要關聯不同的東西,例如打開特定門的開關(或更精確地說,是將特定門保持打開狀態的壓板)。但我的圖塊地圖數組當前僅包含圖塊圖像索引號。 包括相關圖塊的最佳方法是什么(例如哪個開關打開哪個門等)?

是否使用該數據制作一個額外的文件? 還是每個圖塊都有2個值? 我已經嘗試了谷歌搜索,但是它並沒有真正覆蓋任何地方。 我敢肯定有人那里有這種經驗。我真的不想硬編碼它,因為我希望游戲盡可能多才多藝。

我會將您的文件格式從每個2D單元存儲一個圖塊索引更改為存儲一些更復雜的數據對象。 我首先想到的是每個單元的字典,以實現最大的靈活性,但是序列化並存儲它會很大。 在靈活性和存儲大小之間需要權衡。

另一種選擇是使用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 ),現在我可以從我所在的單元格中引用另一個單元格。 下圖顯示了我的關卡設計師的照片,標題欄中顯示了坐標,還顯示了鏈接單元格的image_id名稱和坐標。

關卡設計器鏈接點

非常感謝@ BowlingHawk95的協助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM