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) 

왜 내 플레이어가 움직이지 않는지 혼란 스럽습니까? 그냥 다른 888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888파이썬 3 플레이어가 움직이지 않는다

+1

'P .__ 초기화 __을()'하지 않는다 - 당신은 P = 플레이어()'는 IT가 자동으로 실행 '할 때' 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()를 반환합니다.
더 많은 변경이 필요합니다.


편집 : 코드는 다음과 같이 수 :

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