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()
음 ... 나는 속성에 점수를 바꾸는 다른 방법을 알고 있습니다. self.textbox.value = _____ 그러나 나는 그 물건의 논리에 더 관심이있었습니다. 점수가 바뀌지 않는 이유는 무엇입니까? 변수는 증가하는 것과 동일하며, 모든 코드의 끝에있는 mainloop()은이 종류의 모든 게임에 필요한 코드를 끝없이 반복합니다 ... 그래서 논리를 설명 할 수 있다면 정말 고맙겠습니다. . – Louis93
텍스트 상자는 Pan의'__init__' 함수에서 생성됩니다 - 즉, 생성 된 각 Pan 객체에 대해 한 번. 이것이 텍스트 상자 값이 설정된 유일한 장소입니다. 'str (self.score)'는 Pan이 생성 될 때 현재의'self.score'라는 숫자 값을 기반으로 만들어진 불변의 문자열이라는 사실을 깨닫는 것이 중요합니다. 그것은'self.score'에 의해 명명 된 변수와는 아주 다른 것입니다. Python의 문자열은 불변입니다. 따라서 문자열의 문자열 멤버를 작성하여 점수의 문자열 표현을 유지하고 텍스트 상자를 가리키더라도 자동 업데이트는되지 않습니다. –
좋은 답변, 감사합니다. – Louis93