2011-07-01 15 views
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() 

答えて

5

テキストボックスには値が入ります。テキストボックスを作成するときは、現在のscoreの値から文字列を作成し、テキストをその文字列に設定します。スコアとテキストボックス間の持続的な接続は行われません。

テキストボックスには、おそらくテキストを更新するためのメソッドがあります。スコアをインクリメントした後に値をstr(self.score)にしてそのメソッドを呼び出します。

+0

うーん...私はそれを行うための別の方法を知っていますself.textbox.value = _____ しかし、私は事の論理にもっと関心を持っていました。なぜスコアが変わらないのでしょうか?変数はインクリメントされる変数と同じで、mainloop()はすべてのコードの終わりにコードを無限ループしてこの種のゲームすべてに必要です...あなたがロジックを説明することができれば本当に感謝します。 – Louis93

+1

テキストボックスは、Panの '__init__'関数で作成されます。つまり、作成された各Panオブジェクトに対して1回です。これは、テキストボックスの値が設定されている唯一の場所です。 'str(self.score)'は、Panの作成時に現在の数値の 'self.score'に基づいて構築された不変の文字列であることに気づくことが重要です。これは、 'self.score'で指定された変数とは非常に異なっています。 Pythonの文字列は不変なので、スコアの文字列表現を保持するためにPanの文字列メンバを作成し、それにテキストボックスを指しても、それは自動更新されません。 –

+0

すばらしい答え、ありがとう。 – Louis93