在 pygame 中连续移动方块
Making a square move continously in pygame
所以我是 pygame 的新手,我正在尝试让这个黑色方块向上、向下、向左和向右移动。我希望我能做到这一点,就像当我按下这些键中的任何一个并将它们放在黑匣子中时,它们会不断向上移动。谁能帮我?
这是我的代码
import pygame, sys
import math
pygame.init()
width = 1900
height = 1000
white = (255,255,255)
black = (0,0,0)
player_color = (0,0,0)
player_pos = [950,500]
player_size = (20)
screen = pygame.display.set_mode((width,height))
game_over = False
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
x = player_pos[0]
y = player_pos[1]
if event.key == pygame.K_LEFT:
x -= player_size
elif event.key == pygame. K_RIGHT:
x += player_size
elif event.key == pygame. K_DOWN:
y += player_size
elif event.key == pygame. K_UP:
y -= player_size
player_pos = [x,y]
screen.fill(white)
pygame.draw.rect(screen,black, (player_pos[0], player_pos[1],20,20))
pygame.display.update()
你必须使用 pygame.key.get_pressed()
instead of the keyboard events. See How can I make a sprite move when key is held down.
键盘事件(参见 pygame.event 模块)仅在键状态改变时发生一次。 KEYDOWN
事件在每次按下一个键时发生一次。 KEYUP
每松开一个键就会出现一次。使用键盘事件进行单个操作或逐步移动。
pygame.key.get_pressed()
returns a list with the state of each key. If a key is held down, the state for the key is True
, otherwise False
. Use pygame.key.get_pressed()
评估按钮的当前状态并获得连续移动。
使用pygame.time.Clock
来控制每秒的帧数,从而控制游戏速度和玩家的移动速度。
方法tick()
of a pygame.time.Clock
object, delays the game in that way, that every iteration of the loop consumes the same period of time. See pygame.time.Clock.tick()
:
This method should be called once per frame.
import pygame, sys
pygame.init()
width = 1900
height = 1000
white = (255,255,255)
black = (0,0,0)
player_color = (0,0,0)
player_pos = [950,500]
player_size = (20)
screen = pygame.display.set_mode((width,height))
clock = pygame.time.Clock()
game_over = False
while not game_over:
clock.tick(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
keys = pygame.key.get_pressed()
player_pos[0] += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * player_size
player_pos[1] += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * player_size
screen.fill(white)
pygame.draw.rect(screen, player_color, (player_pos[0], player_pos[1],20,20))
pygame.display.update()
pygame.quit()
sys.exit()
所以我是 pygame 的新手,我正在尝试让这个黑色方块向上、向下、向左和向右移动。我希望我能做到这一点,就像当我按下这些键中的任何一个并将它们放在黑匣子中时,它们会不断向上移动。谁能帮我? 这是我的代码
import pygame, sys
import math
pygame.init()
width = 1900
height = 1000
white = (255,255,255)
black = (0,0,0)
player_color = (0,0,0)
player_pos = [950,500]
player_size = (20)
screen = pygame.display.set_mode((width,height))
game_over = False
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
x = player_pos[0]
y = player_pos[1]
if event.key == pygame.K_LEFT:
x -= player_size
elif event.key == pygame. K_RIGHT:
x += player_size
elif event.key == pygame. K_DOWN:
y += player_size
elif event.key == pygame. K_UP:
y -= player_size
player_pos = [x,y]
screen.fill(white)
pygame.draw.rect(screen,black, (player_pos[0], player_pos[1],20,20))
pygame.display.update()
你必须使用 pygame.key.get_pressed()
instead of the keyboard events. See How can I make a sprite move when key is held down.
键盘事件(参见 pygame.event 模块)仅在键状态改变时发生一次。 KEYDOWN
事件在每次按下一个键时发生一次。 KEYUP
每松开一个键就会出现一次。使用键盘事件进行单个操作或逐步移动。
pygame.key.get_pressed()
returns a list with the state of each key. If a key is held down, the state for the key is True
, otherwise False
. Use pygame.key.get_pressed()
评估按钮的当前状态并获得连续移动。
使用pygame.time.Clock
来控制每秒的帧数,从而控制游戏速度和玩家的移动速度。
方法tick()
of a pygame.time.Clock
object, delays the game in that way, that every iteration of the loop consumes the same period of time. See pygame.time.Clock.tick()
:
This method should be called once per frame.
import pygame, sys
pygame.init()
width = 1900
height = 1000
white = (255,255,255)
black = (0,0,0)
player_color = (0,0,0)
player_pos = [950,500]
player_size = (20)
screen = pygame.display.set_mode((width,height))
clock = pygame.time.Clock()
game_over = False
while not game_over:
clock.tick(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
keys = pygame.key.get_pressed()
player_pos[0] += (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * player_size
player_pos[1] += (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * player_size
screen.fill(white)
pygame.draw.rect(screen, player_color, (player_pos[0], player_pos[1],20,20))
pygame.display.update()
pygame.quit()
sys.exit()