【问题标题】:Snake Game event.type == KEYUP: and game crashesSnake Game event.type == KEYUP: 和游戏崩溃
【发布时间】:2015-09-07 00:54:46
【问题描述】:

当我为某个事件编写代码时,我的代码似乎出现了错误,此时键为 UP 或未按下,我的空闲运行游戏,然后在几秒钟后崩溃,有人能发现我不知道的错误吗?

显然还有更多代码,但在循环中我得到了错误。

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                lead_x_change = - 10
            if event.key == pygame.K_RIGHT:
                lead_x_change =  10
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == event.K_RIGHT:
                lead_x_change = 0

    lead_x += lead_x_change
    gameDisplay.fill(white)
    pygame.draw.rect(gameDisplay, black, [lead_x,lead_y,10,10])
    pygame.display.update()

【问题讨论】:

    标签: pygame


    【解决方案1】:

    根据我对您的代码的了解,您发布了一个没有任何 then 的 if 语句,以便该语句继续执行。这会产生语法错误。添加任何需要去那里的代码,它应该可以工作。

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            lead_x_change = - 10
        if event.key == pygame.K_RIGHT:
            lead_x_change = 10
        if event.type == pygame.KEYUP:
            #  There is nothing here
        if event.key == pygame.K_LEFT or event.key == event.K_RIGHT:
            lead_x_change = 0
    

    【讨论】:

      【解决方案2】:

      确保您获得了lead_x、lead_y 的值

      lead_x = 300
      lead_y = 300
      
      lead_x_change = 0
      lead_y_change = 0
      

      你需要 if elif 否则它不会通过选择

          if event.type == pygame.KEYDOWN:
              if event.key == pygame.K_LEFT:
                  lead_x_change = -10
                  lead_y_change = 0
              elif event.key == pygame.K_RIGHT:
                  lead_x_change = 10
                  lead_y_change = 0
      

      确保绘制、渲染和更新屏幕

         gameDisplay.fill(white)
          pygame.draw.rect(gameDisplay, black, [lead_x,lead_y,10,10])
          pygame.display.update()
      

      它应该看起来像这样

      lead_x = 300
      lead_y = 300
      
      lead_x_change = 0
      lead_y_change = 0
      
      clock = pygame.time.Clock()
      
      
      while not gameExit:
          for event in pygame.event.get():
              if event.type == pygame.QUIT:
                  gameExit = True
              if event.type == pygame.KEYDOWN:
                  if event.key == pygame.K_LEFT:
                      lead_x_change = -10
                      lead_y_change = 0
                  elif event.key == pygame.K_RIGHT:
                      lead_x_change = 10
                      lead_y_change = 0
                  elif event.key == pygame.K_UP:
                      lead_y_change = -10
                      lead_x_change = 0
                  elif event.key == pygame.K_DOWN:
                      lead_y_change = 10
                      lead_x_change = 0
      
          if lead_x >= 800 or lead_x < 0 or lead_y >= 600 or lead_y < 0:
              gameExit = True
      
      
      
          lead_x += lead_x_change
          lead_y += lead_y_change
          gameDisplay.fill(white)
          pygame.draw.rect(gameDisplay, black, [lead_x,lead_y,10,10])
          pygame.display.update()
      

      【讨论】:

        【解决方案3】:

        你已经写了 event.K_RIGHT 而它应该是 pygame.K_RIGHT

        【讨论】:

          猜你喜欢
          • 2018-09-12
          • 1970-01-01
          • 2020-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多