2017-09-05 98 views
0

我正在製作動作冒險沙盒視頻遊戲。這與「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) 

而且我甚至不知道在哪裏,甚至開始在格列!請幫忙嗎?

+0

tkinter是一種圖形用戶界面技術,你將很難用它製作圖形重型遊戲。如何使用特定的遊戲,如pygame或(sic)gamemaker工作室? – Kos

+0

我不想這樣做,因爲這個遊戲開始發展時,我認爲tkinter是遊戲的意思。不幸的是,它不是。但是如果我決定改變和使用這些,我將不得不重做所有東西(而且這很重要)。 – TyTy

+1

重做的好處在於,第二次使用它們時,事情總是會更好...... – Kos

回答

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] 
+0

好吧,但是當我做「世界= np.zeros((5000,5000))」它說「模塊」numpy「沒有屬性」零「」請再次幫助? XD – TyTy

+0

您使用什麼代碼?你進口numpy嗎?你能鏈接到它在github上或pastebin什麼的? – RagingRoosevelt

+0

我輸入了numpy,是的。我試着用你說的代碼來看看它是如何工作的。 – TyTy