【问题标题】:Making a square move continously in pygame在pygame中连续进行正方形移动[重复]
【发布时间】:2022-01-01 15:41:33
【问题描述】:

所以我对 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()

【问题讨论】:

  • 你观察到什么行为?

标签: python python-3.x pygame


【解决方案1】:

您必须使用pygame.key.get_pressed() 而不是键盘事件。见How can I make a sprite move when key is held down

键盘事件(参见pygame.event 模块)仅在按键状态更改时发生一次。每次按下某个键时,KEYDOWN 事件就会发生一次。每次释放键时,KEYUP 发生一次。将键盘事件用于单个操作或逐步移动。

pygame.key.get_pressed() 返回一个包含每个键状态的列表。如果按住某个键,则该键的状态为True,否则为False。使用pygame.key.get_pressed() 评估按钮的当前状态并获得连续移动。

使用pygame.time.Clock 控制每秒帧数,从而控制游戏速度和玩家的移动速度。

pygame.time.Clock 对象的方法tick() 以这种方式延迟游戏,即循环的每次迭代消耗相同的时间段。见pygame.time.Clock.tick():

这个方法应该每帧调用一次。

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()

【讨论】:

    猜你喜欢
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多