【问题标题】:how to move and show a robot at a certain speed at specified intervals in pygame如何在pygame中以指定的时间间隔以一定的速度移动和显示机器人
【发布时间】:2021-07-13 19:50:26
【问题描述】:

我尝试使用 pygame 模拟机器人的运动。机器人从 RL 算法中获得速度和间隔长度。例如,机器人以 10 的速度移动 1 秒,然后以 10 的速度移动 2 秒,以此类推。

我尝试了这个方法,但是没有用。

current_time = pygame.time.get_tick()
while pygame.time.get_tick() <= current_time + interval_length:
        dx = bot_vel * dt
        rect.move(dx, 0)
        screen.fill((0,0,0))
        pygame.draw.rect(screen, (255,255,255), rect)
        pygame.display.flip()

【问题讨论】:

    标签: python pygame simulation move


    【解决方案1】:

    不要尝试在应用程序循环中使用循环来控制对象。使用应用程序循环。

    您必须在应用程序循环中处理事件。分别见pygame.event.get()pygame.event.pump()

    对于游戏的每一帧,您都需要对事件队列进行某种调用。这确保您的程序可以在内部与操作系统的其余部分进行交互。

    使用pygame.time.Clock 控制每秒帧数,从而控制游戏速度。

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

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

    pygame.time.Clock.tick 返回自上次调用以来的毫秒数。当您在应用程序循环中调用它时,这是自上一帧以来经过的毫秒数。将对象速度乘以每帧经过的时间,以获得恒定的运动,而不受 FPS 的影响。

    以像素为单位定义玩家每秒应移动的距离 (move_per_second)。然后在应用循环中计算每帧的距离。

    pygame.Rect.move 不会改变Rect 对象本身,但它会返回一个新的Rect 对象。这意味着,

    rect.move(dx, 0)
    

    不会改变任何东西。您必须将.move 返回的矩形分配给“自身”:

    rect = rect.move(dx, 0)
    

    您也可以使用pygame.Rect.move_ip

    rect.move_ip(dx, 0)
    

    小例子:

    import pygame
    
    pygame.init()
    screen = pygame.display.set_mode((500, 500))
    clock = pygame.time.Clock()
    
    rect = pygame.Rect(0, 250, 20, 20)
    bot_vel = 500 # 500 pixel / second
    
    run = True
    while run:
        dt = clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False       
    
        dx = bot_vel * dt / 1000   
        rect.move_ip(dx, 0)
        if rect.x > screen.get_width():
            rect.x = 0
        
        screen.fill((0,0,0))
        pygame.draw.rect(screen, (255,255,255), rect)
        pygame.display.flip()
    
    pygame.quit()
    exit()
    

    【讨论】:

    • 感谢您的帮助。我可以通过按键等 pygame 事件轻松处理移动机器人,但我不明白如何使用事件通过不同的间隔长度控制机器人的移动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多