Я пытаюсь породить бесконечное количество врагов с заданной скоростью и заставить их двигаться к игроку. Тем не менее, я могу только заставить двух появиться, по одному на каждый исходный прямоугольник, где они появляются. Это потому, что движение перезаписывает прямоугольник, с которым они появляются, поэтому любые другие враги просто появляются поверх одного из первых двух. Это использует функцию move_ip (), которая, я думаю, может быть проблемой, но попытка просто использовать move () не приводит к движению вообще.
def main():
global DISPLAYSURF, FPSCLOCK
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))
pygame.display.set_caption ('Ronin')
checkForQuit()
enemies = []
playerX = 730
enemyImage = pygame.image.load('enemyidle.png')
enemySurf = pygame.transform.scale(enemyImage, (PLAYERWIDTH, PLAYERHEIGHT))
leftRect = pygame.Rect(0, 735, PLAYERWIDTH, PLAYERHEIGHT)
rightRect = pygame.Rect(1500, 735, PLAYERWIDTH, PLAYERHEIGHT)
moveLeft = moveRight = moveUp = moveDown = False
enemycounter = 0
while True:
checkForQuit()
#Draw the background
DISPLAYSURF.blit(backgroundSurf, backgroundRect)
#draw the player
DISPLAYSURF.blit(playerSurf, playerRect)
#time the enemy spawn and draw the enemies
enemy = random.choice([leftRect, rightRect])
if enemycounter < ENEMYSPAWNRATE:
enemycounter += 1
if enemycounter == ENEMYSPAWNRATE:
enemycounter = 0
enemies.append(enemy)
enemyAI(enemies, playerRect)
for e in enemies:
DISPLAYSURF.blit(enemySurf, e)
pygame.display.update()
FPSCLOCK.tick(FPS)
def enemyAI(enemies, playerRect):
for e in enemies:
if e.left > playerRect.right:
e.move_ip(-1 * PLAYERSPEED +5, 0)
if e.right < playerRect.left:
e.move_ip(PLAYERSPEED -5, 0)
main()
Я вижу в отладчике, что каждый новый враг, добавленный в список врагов, имеет те же координаты, что и один из первых двух существующих врагов. Но я хочу, чтобы они появлялись в исходных координатах, указанных в leftRect или rightRect.