Pygame 球员运动
Pygame player movement
我有一个快速的问题要问 - 为什么即使不再按下键,矩形仍然在移动?
(我是 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()
实际上当松开按键时矩形会停止,但您的游戏运行速度太快了。您必须在主应用程序循环中调用 clock.tick(30)
:
while running:
clock.tick(30)
# [...]
参见pygame.time.Clock
/ tick()
:
This method should be called once per frame. It will compute how many milliseconds have passed since the previous call. [...]
好问题。当您按下一个键时,它会多次循环显示“向下”。您需要一个事件处理程序。尝试一个实验。替换:
if keys[pg.K_DOWN]:
self.rect.y += 2
与:
if keys[pg.K_DOWN]:
print("Down")
您会看到每次按下 Key 时都会打印多次,但当您停止按下时停止。
您可以使用变量来跟踪密钥的状态(当它发生变化时),或者使用事件处理程序。
for event in pygame.event.get():
# handle key press
if event.type == pygame.KEYDOWN:
我有一个快速的问题要问 - 为什么即使不再按下键,矩形仍然在移动? (我是 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()
实际上当松开按键时矩形会停止,但您的游戏运行速度太快了。您必须在主应用程序循环中调用 clock.tick(30)
:
while running:
clock.tick(30)
# [...]
参见pygame.time.Clock
/ tick()
:
This method should be called once per frame. It will compute how many milliseconds have passed since the previous call. [...]
好问题。当您按下一个键时,它会多次循环显示“向下”。您需要一个事件处理程序。尝试一个实验。替换:
if keys[pg.K_DOWN]:
self.rect.y += 2
与:
if keys[pg.K_DOWN]:
print("Down")
您会看到每次按下 Key 时都会打印多次,但当您停止按下时停止。
您可以使用变量来跟踪密钥的状态(当它发生变化时),或者使用事件处理程序。
for event in pygame.event.get():
# handle key press
if event.type == pygame.KEYDOWN: