5000x5000用于Python的图像网格Tkinter帆布
我正在制作动作冒险沙盒视频游戏。这与“Terraria”游戏非常相似。因此它涉及放置和销毁块。现在,要消灭块,基本上它只是添加一个与您点击的天空颜色相同的矩形。但是,我不想那样。我不想要它,所以你可以在地面上随意摧毁图块。我决定将游戏中的世界改变为一张瓷砖网格,即PhotoImages。我遇到了很多麻烦。 这里是代码,我重点关注:5000x5000用于Python的图像网格Tkinter帆布
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)
而且我甚至不知道在哪里,甚至开始在格列!请帮忙吗?
您应该将您的世界存储在易于参考的结构中。一个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]
好吧,但是当我做“世界= np.zeros((5000,5000))”它说“模块”numpy“没有属性”零“”请再次帮助? XD – TyTy
您使用什么代码?你进口numpy吗?你能链接到它在github上或pastebin什么的? – RagingRoosevelt
我输入了numpy,是的。我试着用你说的代码来看看它是如何工作的。 – TyTy
tkinter是一种图形用户界面技术,你将很难用它制作图形重型游戏。如何使用特定的游戏,如pygame或(sic)gamemaker工作室? – Kos
我不想这样做,因为这个游戏开始发展时,我认为tkinter是游戏的意思。不幸的是,它不是。但是如果我决定改变和使用这些,我将不得不重做所有东西(而且这很重要)。 – TyTy
重做的好处在于,第二次使用它们时,事情总是会更好...... – Kos