如何让敌人在 pygame 中以小延迟随机发射子弹
how to make the enemy shoot bullets randomly with small delay in pygame
我看过其他线程,但他们说使用 pygame.time.set_timer(x, y) 但这似乎对我不起作用,它仍然以零延迟超快地拍摄而且我没有想法为什么。我想要的是让敌人随机射击但至少有半秒的延迟。 (nme_game 是敌人的矩形,nme_game_bullet 应该是来自敌人的子弹)
代码如下:
def nme_shooting(nme_game, nme_game_bullet):
bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
nme_game_bullet.append(bullet)
nme_game_bullet = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet, 500)
nme_game_bullet
不能同时是列表(或 Group)和事件类型。
你必须在事件循环中处理这个。创建 nme_game_bullet_event
事件类型。仅当您收到 类型 事件 nme_game_bullet_event
:
时才会产生子弹
nme_game_bullet_event = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet_event, 500)
# application loop
run = True
while run:
# event loop
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == nme_game_bullet_event:
bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
nme_game_bullet.append(bullet)
# [...]
或者将事件或事件列表传递给 nme_shooting
函数:
def nme_shooting(nme_game_bullet, event_list):
for event in event_list:
if event.type == nme_game_bullet_event:
bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
nme_game_bullet.append(bullet)
nme_game_bullet_event = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet_event, 500)
# application loop
run = True
while run:
# event loop
event_list = pygame.event.get():
for event in event_list:
if event.type == pygame.QUIT:
run = False
nme_shooting(nme_game_bullet, event_list)
# [...]
我看过其他线程,但他们说使用 pygame.time.set_timer(x, y) 但这似乎对我不起作用,它仍然以零延迟超快地拍摄而且我没有想法为什么。我想要的是让敌人随机射击但至少有半秒的延迟。 (nme_game 是敌人的矩形,nme_game_bullet 应该是来自敌人的子弹)
代码如下:
def nme_shooting(nme_game, nme_game_bullet):
bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
nme_game_bullet.append(bullet)
nme_game_bullet = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet, 500)
nme_game_bullet
不能同时是列表(或 Group)和事件类型。
你必须在事件循环中处理这个。创建 nme_game_bullet_event
事件类型。仅当您收到 类型 事件 nme_game_bullet_event
:
nme_game_bullet_event = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet_event, 500)
# application loop
run = True
while run:
# event loop
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == nme_game_bullet_event:
bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
nme_game_bullet.append(bullet)
# [...]
或者将事件或事件列表传递给 nme_shooting
函数:
def nme_shooting(nme_game_bullet, event_list):
for event in event_list:
if event.type == nme_game_bullet_event:
bullet = pygame.Rect(nme_game.x + nme_game.width / 2.2 + 1, nme_game.y, 5, 25)
nme_game_bullet.append(bullet)
nme_game_bullet_event = USEREVENT + 1
pygame.time.set_timer(nme_game_bullet_event, 500)
# application loop
run = True
while run:
# event loop
event_list = pygame.event.get():
for event in event_list:
if event.type == pygame.QUIT:
run = False
nme_shooting(nme_game_bullet, event_list)
# [...]