C'est encore un programme incomplet, mais pour une raison quelconque, la valeur de la zone de texte n'augmente pas quand elle devrait ... Pourquoi est-ce ?? Lorsque le sprite Pizza chevauche le sprite Pan, le score dans la zone de texte est censé augmenter de 10 points. Pourquoi cela ne se produit-il pas?Question de débogage rapide [Python, pygame]
Merci!
'''
Created on Jul 1, 2011
@author: ******* Louis
'''
#Watch me do.
from livewires import games, color
import random
games.init (screen_width = 640, screen_height = 480, fps = 50)
#Pizza Class
class Pizza (games.Sprite):
pizzaimage = games.load_image ("pizza.bmp", transparent = True)
def __init__(self, x = random.randrange(640), y = 90, dy = 4):
super (Pizza, self).__init__(x = x,
y = y,
image = Pizza.pizzaimage,
dy = dy)
def handle_caught (self):
self.destroy()
class Pan (games.Sprite):
panimage = games.load_image ("pan.bmp", transparent = True)
def __init__ (self, x = games.mouse.x, y = games.mouse.y):
super (Pan, self).__init__(x = x,
y = y,
image = Pan.panimage)
self.score = 0
self.textbox = games.Text (value = str(self.score),
size = 20,
color = color.black,
x = 550,
y = 50)
games.screen.add(self.textbox)
def update (self): #WWWWOW There is actually an *update* method
self.x = games.mouse.x
self.y = games.mouse.y
if self.left < 0:
self.left = 0
if self.right >640:
self.right = 640
if self.top < 0:
self.top = 0
if self.bottom > 480:
self.bottom = 480
self.check_collision()
def check_collision (self):
for Pizza in self.overlapping_sprites:
self.score = self.score + 10
Pizza.handle_caught()
#main
def main():
wallbackground = games.load_image ("wall.jpg", transparent = False)
games.screen.background = wallbackground
games.screen.add(Pizza())
games.screen.add(Pan())
games.mouse.is_visible = False
games.screen.event_grab = True
games.screen.mainloop()
main()
Hmm ... Je connais une autre façon de le faire qui changerait le score à l'attribut self.textbox.value = _____ Mais j'étais plus concerné par la logique de la chose. Pourquoi le score ne changerait-il pas? La variable est la même qui s'incrémente, et le mainloop() à la fin de tout le code boucle sans fin le code comme c'est nécessaire pour tous les jeux de ce genre ... Donc j'apprécierais vraiment si vous pouviez expliquer la logique . – Louis93
La zone de texte est créée dans la fonction '__init__' de Pan - c'est-à-dire, une fois pour chaque objet Pan créé. C'est le seul endroit où la valeur de la zone de texte est définie. Il est important de réaliser que 'str (self.score)' est une chaîne immuable construite sur la base de la valeur numérique actuelle de 'self.score' au moment de la création de Pan. C'est une chose très différente de la variable nommée par 'self.score'. Les chaînes en python sont également immuables, donc même si vous avez créé un membre de chaîne de Pan pour contenir la représentation sous forme de chaîne de la partition, et la zone de texte pointée dessus, elle ne serait toujours pas mise à jour automatiquement. –
bonne réponse, merci. – Louis93