[英]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.