【问题标题】:Pygame player movement [duplicate]Pygame玩家移动[重复]
【发布时间】:2020-08-02 16:47:27
【问题描述】:

我有一个简单的问题要问 - 为什么即使不再按下键,矩形仍然在移动? (我是 pygame 新手,请耐心等待:D) 谢谢

import pygame as pg

pg.init()
clock = pg.time.Clock()
clock.tick(30)
HEIGHT, WIDTH = 400, 400


class Clovik(pg.sprite.Sprite):
    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((20, 20))
        self.image.fill((162, 38, 0))
        self.rect = self.image.get_rect()
        self.rect.center = ((HEIGHT / 2, WIDTH / 2))

    def update(self):
        keys = pg.key.get_pressed()
        if keys[pg.K_DOWN]:
            self.rect.y += 2




screen = pg.display.set_mode((HEIGHT, WIDTH))
running = True
all_sprites = pg.sprite.Group()
p = Clovik()
all_sprites.add(p)

while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False

    all_sprites.update()
    screen.fill((100, 250, 0))
    all_sprites.draw(screen)
    pg.display.flip()

【问题讨论】:

    标签: python pygame game-physics


    【解决方案1】:

    实际上,当松开按键时,矩形会停止,但是您的游戏运行速度太快了。您必须在主应用程序循环中调用clock.tick(30)

    while running:
        clock.tick(30)
    
        # [...]
    

    pygame.time.Clock/tick()

    此方法应每帧调用一次。它将计算自上次调用以来经过了多少毫秒。 [...]

    【讨论】:

      【解决方案2】:

      好问题。当您按下一个键时,它会在多个循环中处于“向下”状态。您需要一个事件处理程序。尝试一个实验。替换:

          if keys[pg.K_DOWN]:
              self.rect.y += 2
      

      与:

          if keys[pg.K_DOWN]:
              print("Down")
      

      您会看到,每次按下该键时,都会发生多次打印,但当您停止按下时就会停止。

      您可以使用变量来跟踪键的状态(当它更改时),或者使用事件处理程序。

          for event in pygame.event.get():
              # handle key press
              if event.type == pygame.KEYDOWN:
      

      【讨论】:

      • 请阅读问题:*“为什么矩形仍然在移动即使不再按下键?”- 这个答案没有回答问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多