簡體   English   中英

如何移動和在pygame的指定的時間間隔示出了在一定速度的機器人

[英]how to move and show a robot at a certain speed at specified intervals in pygame

我嘗試使用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()

不要試圖與應用程序循環內部循環來控制的對象。 使用應用程序循環。

你必須處理在應用循環的事件。 pygame.event.get()分別pygame.event.pump()

為了您的游戲的每一幀,您將需要某種形式的呼叫事件隊列。 這與操作系統的其他部分,確保您的程序可以在內部相互作用。

使用pygame.time.Clock控制每秒幀數,從而控制游戲速度。

該方法tick()一個的pygame.time.Clock對象,延遲那樣的游戲中,該循環的每一次迭代占用相同的時間周期。 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM