簡體   English   中英

乒乓球拍不動

[英]Paddles in pong aren't moving

我想使用 W 和 S 移動左槳,但是每當我單擊鍵時,槳都不會移動。 我只學了幾個月的python和幾周的pygame,所以如果它是一個非常明顯的錯誤,那就是原因。

這是主要的游戲循環:

while not x:
  for event in pygame.event.get():
    if event.type == pygame.QUIT: 
      x = True #quits the game when you press X
    if event.type == pygame.KEYUP: #makes start screen go away
      if event.key == pygame.K_RETURN:
        gamescreen() 
  
      ball = Ball(window, white, 350, 220, 7)
      p1Paddle = Paddle(window, blue, 50, 180, 10, 60)
      p2Paddle = Paddle(window, red, 630, 180, 11, 60)
  #moves the paddles
    if event.type == pygame.KEYDOWN:
      if event.key == pygame.K_w: #supposed to make the paddle go up
        p1Paddle.state = 'up'
        print('up')
        
    if event.type == pygame.KEYDOWN:
      if event.key == pygame.K_s: #supposed to make the paddle go down
        p1Paddle.state = 'down'
        p1Paddle.move()
        print('down')

    
    pygame.display.update()
    clock.tick(45)

這是槳函數/類。

class Paddle:
  def __init__(self, screen, colour, posX, posY, width, height):
    self.screen = screen
    self.colour = colour
    self.posX = posX
    self.posY = posY
    self.width = width
    self.height = height
    self.state = 'stopped'
    self.show()

  def show(self):
    pygame.draw.rect(self.screen, self.colour, (self.posX, self.posY, self.width, self.height))

  def move(self):
    if self.state == 'up':
      self.posY -= 10

    elif self.state == 'down':
      self.posY += 10

(我還沒有機會為第二個槳添加控件;一旦我弄清楚這個,我就會到達那里。)它會打印“向上”和“向下”,所以我知道它在某種程度上有效。

您需要在應用程序循環之前而不是在應用程序循環中創建對象。 但是您必須在應用程序循環中的新位置繪制每一幀中的對象:

p1Paddle = Paddle(window, blue, 50, 180, 10, 60)
p2Paddle = Paddle(window, red, 630, 180, 11, 60)
ball = Ball(window, white, 350, 220, 7)
 
while not x:
    # handle events
    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            x = True
        # [...] more events


    # clear screen
    window.fill(0)

    # draw objects
    p1Paddle.show()
    p2Paddle.show()
    ball.show()

    # update display
    pygame.display.update()
    clock.tick(45)

典型的 PyGame 應用程序循環必須:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM