簡體   English   中英

乒乓球僅在按鍵/鼠標移動時移動

[英]Ball in pong only moving on keypress/mouse move

除非我移動鼠標或單擊我應該做的事情的按鈕之一,否則球不會移動。 (即應該移動槳的向上和向下按鈕。)單擊按鈕和移動鼠標不會控制球移動的方向 - 它只是讓它按照它應該的方式移動。 如果我停止移動鼠標或單擊按鈕,它將完全停止移動。

這是一些代碼:

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.startMoving() #makes the ball start moving
        start = True

    if start == True:
      gameScreen()

      ball.move() #controls the movement of the ball
      
      ball.show() #makes the ball show up

      p1Paddle.border()
      p1Paddle.show() #make the paddles and ball show up vv

      p2Paddle.border()
      p2Paddle.show()
      

      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_w: #makes blue paddle go up
          p1Paddle.state = 'up'
          p1Paddle.move()
        
      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_s: #makes blue paddle go down
          p1Paddle.state = 'down'
          p1Paddle.move()
  
      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_UP: #makes red paddle go up
          p2Paddle.state = 'up'
          p2Paddle.move()
          
      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_DOWN: #makes red paddle go down
          p2Paddle.state = 'down'
          p2Paddle.move()
    
    pygame.display.update() #updates the screen/window
    clock.tick(30) 

這是球類的代碼。

class Ball:
  def __init__(self, screen, colour, posX, posY, radius):
    self.screen = screen
    self.colour = colour
    self.posX = posX
    self.posY = posY
    self.radius = radius
    self.dx = 0
    self.dy = 0
    self.show()

  def show(self):
    pygame.draw.circle(self.screen, self.colour, (self.posX, self.posY), self.radius)

  def startMoving(self):
    self.dx = 15
    self.dy = 5

  def move(self):
    self.posX += self.dx
    self.posY += self.dy

以下是我將如何更改此代碼 - 你必須看看它是否有效,但我認為這是你的意圖。 我添加的評論解釋了我的變化。 我這樣做是為了讓球的所有運動和繪制代碼,以及用於繪制球拍的代碼,始終運行,無論用戶是否按下鍵或生成其他類型的事件。

# -start of application loop-
while not x:
  # -start of event loop- 
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      x = True
    if event.type == pygame.KEYUP:
      if event.key == pygame.K_RETURN:
        gameScreen()
        ball.startMoving()
        start = True

    # only move the paddle if the game is running and the user pressed a key:
    if start == True:
      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_w:
          p1Paddle.state = 'up'
          p1Paddle.move()

      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_s:
          p1Paddle.state = 'down'
          p1Paddle.move()

      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_UP:
          p2Paddle.state = 'up'
          p2Paddle.move()

      if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_DOWN:
          p2Paddle.state = 'down'
          p2Paddle.move()
      # -end of event loop-
    
    # Move and draw everything once per application loop,
    # regardless of if the event loop ran:
    if start == True:
      gameScreen()
      ball.move()
      ball.show()
      p1Paddle.border()
      p1Paddle.show()
      p2Paddle.border()
      p2Paddle.show()

    pygame.display.update()
    clock.tick(30)
    # -end of application loop-

暫無
暫無

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

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