gpt4 book ai didi

python - 如何分别移动列表中多个相同的矩形?

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:11 24 4
gpt4 key购买 nike

我试图以给定的速率产生无限数量的敌人,并让它们向玩家移动。然而,我只能设法让两个生成,每个生成的原始矩形对应一个。这是因为移动会覆盖它们生成的矩形,因此任何其他敌人都会生成在前两个矩形之一的顶部。这是使用 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 指定的原始坐标处。

最佳答案

你基本上是正确的。您的问题在于创建两个矩形,然后将每个敌人分配给这两个矩形之一。

因为 enemy = random.choice(...)leftRectrightRect 创建别名,并且因为您 enemies.append(enemy),您有一个由相同两个矩形的别名组成的列表。

在随机选择矩形后尝试对其进行 .copy():

startLocations = (leftRect, rightRect)

def new_enemy():
"""Return a new enemy rect randomly in one of the start locations"""
return random.choice(startLocations).copy()

while True:

# ... as before ...

#time the enemy spawn and draw the enemies
if enemycounter < ENEMYSPAWNRATE:
enemycounter += 1
else:
enemycounter = 0
enemies.append(new_enemy())

enemyAI(enemies, playerRect)

# ... as before ...

关于python - 如何分别移动列表中多个相同的矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54067159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com