2011-07-01 3 views
0

아직 불완전한 프로그램이지만 어떤 이유로 텍스트 상자의 값이 증가하지 않아도 ... 왜 이가요 ?? 피자 스프라이트가 팬 스프라이트와 겹치면 텍스트 상자의 점수는 값이 10으로 증가합니다. 왜 이런 현상이 발생하지 않습니까?빠른 디버깅 질문 [파이썬, 파이 게임]

감사합니다.

''' 
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의 문자열은 불변입니다. 따라서 문자열의 문자열 멤버를 작성하여 점수의 문자열 표현을 유지하고 텍스트 상자를 가리키더라도 자동 업데이트는되지 않습니다. –

+0

좋은 답변, 감사합니다. – Louis93

관련 문제