目前,我的下一个项目将是一个平台游戏,当我在 stackoverflow 上查找有关多种机制的研究时,我看到很多人在做同样的事情:他们保存带有某些变量的布局,然后去某个地方将其卸载,然后它只是在游戏中呈现。我很感兴趣,所以我进一步查看,但没有发现任何有关如何加载/卸载此类状态的信息,或者也许我只是没有正确地措辞我的搜索。
无论哪种方式,我该怎么做?
例如:我会将关卡布局保存为数组或单个多行字符串,然后以某种方式为每个字母生成一个图 block Sprite ,例如 T。
import pygame
# Storage method A
level = '''
X X X X X
X X X X X
T T X X X
X X X T T
T T T T T
'''
# Storage Method B
level2 = [
'XXXXX',
'XXXXX',
'TTXXX',
'XXXTT',
'TTTTT'
]
# X is blank space, T is tiles
# Then what? Thats what I need to know.
# If someone already answered this and I'm just not using the right keywords let me know.
最佳答案
您需要计算每个图 block 的像素位置。要绘制任何图 block ,您需要知道
- Canvas 的大小
- 网格的大小
- 图 block 在网格中的位置
1:找到 Canvas 的大小应该很简单。
2:对于第二种存储方式,您可以这样做
height = len(level2)
width = len(level2[0]) #Assuming all rows are of equal length and there's at least one row
3:我们将迭代行和字符,以跟踪我们在侧面网格中的位置。
def draw_tiles(canvas_width, canvas_height, width, height, level2):
for row in range(height):
for column in range(width):
if list(level2[row])[column] == 'T':
pixel_x = int(canvas_width/width)*column
pixel_y = int(canvas_height/height)*row
draw_tile(pixel_x, pixel_y)
现在您需要做的就是定义draw_tile(x, y)函数来在 Canvas 上绘制一个图 block ,其左上角位于像素坐标(x, y)上。我确信 pygame 可以做到这一点。
确保设置网格宽度/高度,以便 canvas_width/width 和 canvas_height/height 都是整数。否则,您的瓷砖会因舍入而稍微偏移。
关于python - 如何将关卡布局保存在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339874/