2017-09-05 6 views
0

Je suis en train de créer un jeu vidéo d'aventure et de jeu de sable. C'est assez similaire au jeu "Terraria". Par conséquent, il implique de placer et de détruire des blocs. Pour l'instant, pour détruire les blocs, il suffit d'ajouter un rectangle de la même couleur que le ciel sur lequel vous avez cliqué. Cependant, je ne le veux pas. Je ne le veux pas, donc tu peux librement dessiner des images dans le sol avec des blocs destructeurs. J'ai décidé de changer le monde dans le jeu à une grille de tuiles, qui sont PhotoImages. J'ai beaucoup de problèmes avec ça. Voici le code que je me concentre sur:5000x5000 Grille d'images pour Python Tkinter Canvas

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) 

Et je ne sais même pas où même début pour les colonnes de la grille! Toute aide s'il vous plaît?

+0

tkinter est une technologie pour GUI, vous allez avoir du mal à faire un graphisme lourd jeu avec elle. Pourquoi ne pas utiliser un jeu spécifique, comme pygame ou (sic) gamemaker studio? – Kos

+0

Je ne veux pas faire ça parce que ce jeu a commencé le développement quand je pensais que tkinter était MEANT pour les jeux. Malheureusement, ce n'est pas le cas. Mais je devrais refaire tout (et c'est beaucoup à refaire) si je décidais de changer et d'utiliser ceux-là. – TyTy

+1

la bonne chose à propos de refaire, c'est que les choses sont toujours mieux la deuxième fois que vous les faites ... – Kos

Répondre

1

Vous devriez stocker votre monde dans une structure facile à consulter. Un tableau numpy pourrait être utile. Cela sera également utile en tant que système de coordonnées, car vous pouvez faire correspondre les coordonnées des joueurs aux entiers afin de déterminer sur quelle case ils se trouvent.

Vous pouvez avoir des valeurs entières dans le tableau numpy, puis ces entiers peuvent correspondre aux tuiles. De cette façon, le comportement lors de l'interaction avec une mosaïque serait basé sur la valeur stockée dans le tableau. Quelque chose comme

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)) 

Vous pouvez utiliser des tranches du tableau numpy pour limiter la fenêtre à une petite partie du monde (par exemple, si la fenêtre est 500x100 tuiles):

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') 

Si vous voulez saisir Une section du monde, vous pouvez alors faire

world[y_0:y_0+h, x_0:x_0+w] 
+0

Ok mais quand je fais le "monde = np.zeros ((5000,5000))" il est dit "module" numpy "n'a pas d'attribut" zéros "" Aide encore s'il vous plaît? XD – TyTy

+0

Quel code utilisez-vous? Avez-vous importé numpy? Pourriez-vous lier sur github ou pastebin ou quelque chose? – RagingRoosevelt

+0

J'ai importé numpy, oui. J'essaie le code que vous avez dit pour voir comment cela fonctionne et tout. – TyTy