2011-07-01 43 views
0

它仍然是一个不完整的程序,但由于某种原因,文本框的值不应该增加时,它应该...为什么这是?? 当Pizza sprite与Pan sprite重叠时,文本框中的分数应该增加10。为什么这不会发生?快速调试问题[Python,pygame]

谢谢!

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

回答

5

该文本框的值是一个字符串。当您创建文本框时,可以从当前score值中创建一个字符串,并将该文本设置为该字符串。乐谱和文本框之间没有持久的联系。

该文本框可能有更新其文本的方法;在增加分数后,使用值str(self.score)调用该方法。

+0

嗯...我知道另一种方法来做到这一点,将改变分数的属性self.textbox.value = _____ 但我更关心的东西的逻辑。为什么分数不会改变?变量是相同的,得到递增,并且所有代码末尾的mainloop()无限循环代码,这是所有这类游戏所必需的。所以,如果能够解释逻辑,我会很感激它。 – Louis93

+1

该文本框是在Pan的'__init__'函数中创建的,即为每个创建的Pan对象创建一次。这是文本框值的唯一设置。认识到'str(self.score)'是一个不可变的字符串是很重要的,它是在Pan创建时基于'self.score'的当前数值创建的。这与'self.score'命名的变量完全不同。 Python中的字符串也是不可变的,所以即使你创建了一个Pan的字符串成员来保存分数的字符串表示,并指向文本框,它仍然不会自动更新。 –

+0

很好的答案,谢谢。 – Louis93