0
これはまだ不完全なプログラムですが、何らかの理由でテキストボックスの値が増加しない...なぜですか? PizzaスプライトがPanスプライトと重なっている場合、テキストボックスのスコアは値が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()
うーん...私はそれを行うための別の方法を知っていますself.textbox.value = _____ しかし、私は事の論理にもっと関心を持っていました。なぜスコアが変わらないのでしょうか?変数はインクリメントされる変数と同じで、mainloop()はすべてのコードの終わりにコードを無限ループしてこの種のゲームすべてに必要です...あなたがロジックを説明することができれば本当に感謝します。 – Louis93
テキストボックスは、Panの '__init__'関数で作成されます。つまり、作成された各Panオブジェクトに対して1回です。これは、テキストボックスの値が設定されている唯一の場所です。 'str(self.score)'は、Panの作成時に現在の数値の 'self.score'に基づいて構築された不変の文字列であることに気づくことが重要です。これは、 'self.score'で指定された変数とは非常に異なっています。 Pythonの文字列は不変なので、スコアの文字列表現を保持するためにPanの文字列メンバを作成し、それにテキストボックスを指しても、それは自動更新されません。 –
すばらしい答え、ありがとう。 – Louis93