前提・実現したいこと
python(pygame)を使ってキー押しで図形が動くものを作っています。
ランダムなタイミングで、キー押しと図形が動くまでのタイミングに遅延を持たせたいと思っています。不意にキー押しと図形の動くタイミングに遅延が生じてほしいです。
発生している問題・エラーメッセージ
キー押しと図形が動くまでのタイミングに遅延を持たせることはできましたが、試行中ずっと遅延が生じてしまいます。
始まってから5秒後~25秒後の間にランダムなタイミングで遅延をもたせたいのですが、どのような方法があるかをご教授いただきたいです。
以下のコードは試行中常に0.5秒の遅延が生じています。
エラーメッセージ
該当のソースコード
python
1import pygame 2from pygame.locals import * 3import sys 4import time 5import heapq 6 7delay_inputs = [] 8 9start=time.time() 10 11BLACK = (0, 0, 0) 12RED = (255, 0, 0) 13WHITE = (255, 255, 255) 14 15pygame.init() #初期化 16screen = pygame.display.set_mode((640, 500)) #画面サイズ 17myclock = pygame.time.Clock() 18myclock.tick(30) 19pygame.display.flip() 20 21x =320 #circleの初期位置指定 22 23 24while True: 25 time.sleep(0.1) 26 screen.fill(BLACK) 27 pygame.draw.circle(screen, RED, (x, 400), 5) #円 28 pygame.display.update() 29 for event in pygame.event.get(): 30 if event.type==pygame.QUIT: 31 pygame.quit() 32 sys.exit() 33 now = pygame.time.get_ticks() 34 if delay_inputs and delay_inputs[0][0] <= now: 35 _, key_input = heapq.heappop(delay_inputs) 36 if key_input == "left": 37 x -= 5 38 elif key_input == "right": 39 x += 5 40 pressed_key=pygame.key.get_pressed() 41 if (pressed_key[K_LEFT] and x>0): 42 heapq.heappush(delay_inputs, (now+500, "left")) #ここで遅延時間 43 if (pressed_key[K_RIGHT] and x<640): 44 heapq.heappush(delay_inputs, (now+500, "right")) 45 if pressed_key[K_ESCAPE]: 46 pygame.quit() 47 sys.exit() 48 if time.time()-start>30: 49 pygame.quit() 50 sys.exit()
試したこと
pygame.time.set_timer を使ってみましたが、eventの書き方がよくわかりませんでした。
一応pygame.time.set_timerを使用してみたコードも載せておきます。
while文の中の
pygame.time.set_timer(heapq.heappush, random.randint(min_time, max_time))
において
TypeError: an integer is required (got type builtin_function_or_method)
というエラーが表示されます。
python
1import pygame 2from pygame.locals import * 3import sys 4import time 5import heapq 6import random 7 8delay_inputs = [] 9 10start=time.time() 11 12BLACK = (0, 0, 0) 13RED = (255, 0, 0) 14WHITE = (255, 255, 255) 15 16pygame.init() #初期化 17screen = pygame.display.set_mode((640, 500)) #画面サイズ 18myclock = pygame.time.Clock() 19myclock.tick(30) 20pygame.display.flip() 21 22x =320 #circleの初期位置指定 23 24 25while True: 26 time.sleep(0.1) 27 screen.fill(BLACK) 28 pygame.draw.circle(screen, RED, (x, 400), 5) #円 29 pygame.display.update() 30 for event in pygame.event.get(): 31 if event.type==pygame.QUIT: 32 pygame.quit() 33 sys.exit() 34 now = pygame.time.get_ticks() 35 if delay_inputs and delay_inputs[0][0] <= now: 36 _, key_input = heapq.heappop(delay_inputs) 37 if key_input == "left": 38 x -= 5 39 elif key_input == "right": 40 x += 5 41 pressed_key=pygame.key.get_pressed() 42 if (pressed_key[K_LEFT] and x>0): 43 heapq.heappush(delay_inputs, (now+500, "left")) #ここで遅延時間 44 min_time, max_time = 5000, 20000 # 5 seconds to 20 seconds 45 pygame.time.set_timer(heapq.heappush, random.randint(min_time, max_time)) 46 if (pressed_key[K_RIGHT] and x<640): 47 heapq.heappush(delay_inputs, (now+500, "right")) 48 min_time, max_time = 5000, 20000 # 5 seconds to 20 seconds 49 pygame.time.set_timer(heapq.heappush, random.randint(min_time, max_time)) 50 if pressed_key[K_ESCAPE]: 51 pygame.quit() 52 sys.exit() 53 if time.time()-start>30: 54 pygame.quit() 55 sys.exit() 56
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/13 02:58