私の前の質問のフォローアップの質問。実行時にクラス内の変数を変更する方法は?
円が正しく表示されたら、今度はその円をキーボード入力で移動できるようにしたいと考えています。
私はクラスを変更しようとしているので、クラスの同じインスタンスを常に変更するようにインスタンスを持つ必要があります。
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が変更され、円が動くようにする必要があります。
すでに 'player'クラスインスタンスのインスタンス属性を' player.color = blue'と 'player.color = red'で変更しています。 'xPos'でも' player.xPos = player.xPos + 1'と同じことができます。 –
色はうまくいきません:)動作するかどうかを確認するためのデバッグ用にあります。 – Markus121
それで、あなた自身の '__init__'メソッドの中で、あなたのプレイヤークラスが一度描画されるように見えます。あなたのイベントループ( 'while running:'ループ)内では、あなたがプレイヤーを描画するようには見えません。プレイヤーの値を更新しますが、再度描画しないと、更新された値は表示されません。 –