2017-12-06 12 views
-1
class Player(pg.sprite.Sprite): 
    def __init__(self): 
     pg.sprite.Sprite.__init__(self) 
     self.x = 32 
     self.y = 32 
     self.yspeed = 0 
     self.xspeed = 0 
     self.image = pg.draw.rect(screen, yellow, (self.x, self.y, tilesize, tilesize)) 
     self.rect = pg.Rect(self.x, self.y, 32, 32) 

    def moveRight(self): 
     self.xspeed = 5 
     self.yspeed = 0 

    def moveLeft(self): 
     self.xspeed = -5 
     self.yspeed = 0 

    def moveUp(self): 
     self.xspeed = 0 
     self.yspeed = -5 

    def moveDown(self): 
     self.xspeed = 0 
     self.yspeed = 5 

playing = True 
while playing: 

    p = Player() 

    for event in pg.event.get(): 

     if event.type == pg.QUIT: 
      playing = False 

     if event.type == pg.KEYDOWN: 
      if event.key == pg.K_d: 
       p.moveRight() 
      if event.key == pg.K_a: 
       p.moveLeft() 
      if event.key == pg.K_w: 
       p.moveUp() 
      if event.key == pg.K_s: 
       p.moveDown() 

    p.x += p.xspeed 
    p.y += p.yspeed 

    screen.fill(black) 
    p.__init__() 
    drawGrid() 
    pg.display.update() 
    clock.tick(60) 

私のプレーヤーが動いていない理由は混乱していますか?ただ、それ以外の場合は888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888Python 3プレイヤーが動いていない

+1

'P .__のinit __()を'行わない - あなたは、p =プレイヤー() 'それが自動的に実行'行うときに ' p .__ init __() 'プレーヤーのデータをリセットする必要がある場合、データをリセットするために 'Player()'にメソッドを作成してください。 – furas

答えて

1

大きなミスを押すまで、プレイヤーが継続的に一方向に行く簡単なゲームループを作る:それはすべての情報をリセットするので、それはすべてのループでPlayer()を再現するためwhile playing内部p = Player()を作成しないでください。

Player()

while前を作成して、それがあまりにも情報をリセットするため p.__init__()を使用しないでください。あなたは

screen.blit(p.image, p.rect) 

が必要しかし、私は

self.image = pg.draw.rect(screen, yellow, (self.x, self.y, tilesize, tilesize)) 

pygame.draw.rect()別のミスを参照してください、それを描画する

は、画像を作成しません、それが画面上に直接描画し、Rect()を返します。
これ以上の変更が必要です。


EDIT:コードは次のようになります。

class Player(pg.sprite.Sprite): 

    def __init__(self): 
     pg.sprite.Sprite.__init__(self) 
     self.x = 32 
     self.y = 32 
     self.yspeed = 0 
     self.xspeed = 0 

    def draw(self, screen): 
     pg.draw.rect(screen, yellow, (self.x, self.y, tilesize, tilesize)) 

    def moveRight(self): 
     self.xspeed = 5 
     self.yspeed = 0 

    def moveLeft(self): 
     self.xspeed = -5 
     self.yspeed = 0 

    def moveUp(self): 
     self.xspeed = 0 
     self.yspeed = -5 

    def moveDown(self): 
     self.xspeed = 0 
     self.yspeed = 5 

p = Player() 
playing = True 
while playing: 

    for event in pg.event.get(): 

     if event.type == pg.QUIT: 
      playing = False 

     if event.type == pg.KEYDOWN: 
      if event.key == pg.K_d: 
       p.moveRight() 
      if event.key == pg.K_a: 
       p.moveLeft() 
      if event.key == pg.K_w: 
       p.moveUp() 
      if event.key == pg.K_s: 
       p.moveDown() 

    p.x += p.xspeed 
    p.y += p.yspeed 

    screen.fill(black) 
    p.draw() 
    drawGrid() 
    pg.display.update() 
    clock.tick(60) 
+0

返信いただきありがとうございます!それは役に立ちますが、私の問題はまだ解決されていません。あなたがアドバイスできるものは何ですか? – rekabyllus

+0

新しいコードを回答してください。 – furas

関連する問題