2016-10-20 14 views
0

私の前の質問のフォローアップの質問。実行時にクラス内の変数を変更する方法は?

円が正しく表示されたら、今度はその円をキーボード入力で移動できるようにしたいと考えています。

私はクラスを変更しようとしているので、クラスの同じインスタンスを常に変更するようにインスタンスを持つ必要があります。

import pygame 
pygame.init() 

#Colors 
black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 

#Display 
display_width, display_height = 800, 600 
screen_center = int(display_width * 0.5), int(display_height * 0.5) 
screen = pygame.display.set_mode((display_width, display_height)) 

#Clock 
clock = pygame.time.Clock() 

class Player(): 
    def __init__(self): 
     self.xPos = int(display_width * 0.5) 
     self.yPos = int(display_height * 0.5) 
     self.color = blue 
     self.radius = 15 
     self.width = 0 

     pygame.draw.circle(screen, self.color, (self.xPos, self.yPos), self.radius, self.width) 

def game_loop(): 
    player = Player() #PLAYER CLASS INSTANCE 

    running = True 
    while running: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       running = False 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        player.color = blue # THESE COLORS ARE MAINLY HERE FOR DEBUGGING 
       if event.key == pygame.K_RIGHT: 
        player.color = red # THESE COLORS ARE MAINLY HERE FOR DEBUGGING 

       if event.key == pygame.K_UP: 
        pass 
       if event.key == pygame.K_DOWN: 
        pass 

     #Background 
     screen.fill(white) 

     #Draw everything in order, each drawn object will be drawn beneath the next drawn object. 
     player 

     #Update 
     pygame.display.update() 
     clock.tick(60) 

game_loop() 

たとえば、左のキーを押すと、クラス内のxPosが変更され、円が動くようにする必要があります。

+1

すでに 'player'クラスインスタンスのインスタンス属性を' player.color = blue'と 'player.color = red'で変更しています。 'xPos'でも' player.xPos = player.xPos + 1'と同じことができます。 –

+0

色はうまくいきません:)動作するかどうかを確認するためのデバッグ用にあります。 – Markus121

+0

それで、あなた自身の '__init__'メソッドの中で、あなたのプレイヤークラスが一度描画されるように見えます。あなたのイベントループ( 'while running:'ループ)内では、あなたがプレイヤーを描画するようには見えません。プレイヤーの値を更新しますが、再度描画しないと、更新された値は表示されません。 –

答えて

0

あなたはそれが自分自身を描画するためのseparatのemethodを持たせるためにあなたのプレーヤーのクラスを変更してみてください:

class Player(): 
    def __init__(self): 
     self.xPos = int(display_width * 0.5) 
     self.yPos = int(display_height * 0.5) 
     self.color = blue 
     self.radius = 15 
     self.width = 0 

    def draw(self): 
     pygame.draw.circle(screen, self.color, (self.xPos, self.yPos), self.radius, self.width) 

次に、あなたのメインループ、コールplayer.draw(内側)は、画面の塗りをやった後:

#Background 
screen.fill(white) 

#Draw everything in order, each drawn object will be drawn beneath the next drawn object. 
player.draw() 

プレーヤーオブジェクトは作成時に描画されず、メインループの繰り返しごとに描画されます。

+0

これは私が心に持っていたのとまったく同じです:)ありがとう! – Markus121

+0

しかし、これは何を前進させるのだろうか? – Markus121

+0

上記の私のコメントを参照してください: "\t あなた自身の__init__メソッドの中で、自分のプレイヤークラスが一度描画されるようです。イベントループ(While running:ループ)内では、プレイヤーを描画するようには見えません。プレイヤーの値を更新しますが、再度描画しないと更新された値は表示されません。 " –

関連する問題