我正在制作动作冒险沙盒视频游戏。它与游戏" Terraria"非常相似。因此,它涉及放置和销毁块。现在,要销毁块,基本上它只是添加一个与您单击的天空颜色相同的矩形。但是,我不想要那个。我不想要它,所以你可以通过破坏块自由地在地面上绘制图像。我决定将游戏世界改为瓷砖网格,即PhotoImages。我遇到了很多麻烦。 这是我关注的代码:
DirtImage = PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(61).png')
GrassImage = PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(62).png')
TilePlacement = (10, 5000)
for row in range(5000):
c.create_image(TilePlacement, image=DirtImage, tags='Tile')
TilePlacement += (20, 0)
我甚至不知道哪里甚至开始为网格中的列!有什么帮助吗?
答案 0 :(得分:1)
您应该将您的世界存储在易于参考的结构中。 numpy数组可能很方便。这也可以作为一个坐标系统使用,因为你可以将玩家坐标的浮点数映射到整数,以确定它们在哪个区块上。
你可以在numpy数组中使用整数值,然后这些整数可以映射到tile。这样,与图块交互时的行为将基于存储在数组中的值。像
这样的东西tile_names = {0: 'empty', 1: 'dirt', 2: 'grass'}
tile_sprites = {0: PhotoImage(file = '/path/to/sky'),
1: PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(61).png'),
2: PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(62).png')}
world = np.zeros((5000,5000))
您可以使用numpy数组的切片将视口限制为世界的一小部分(例如,如果您的窗口是500x100图块):
x_offset = 4000
y_offset = 50
for x in range(100):
for y in range(500):
sprite = tile_sprites[world[y_offset:y_offset+y, x_offset:x_offset+x]]
c.create_image((20*y, 20*x), image=tile_sprites[val], tags='Tile')
如果你想抓住世界的一部分,你可以做
world[y_0:y_0+h, x_0:x_0+w]