如何解决Pygame:收到一个错误,表明精灵不可迭代
我正在编写一个 pygame 代码来制作汽车游戏。 这是一个基本的汽车游戏,其中英雄精灵汽车应该避免与敌人精灵接触。 因此,对于碰撞部分,我们必须为敌方汽车和英雄汽车创建一个蒙版。
代码如下:
import pygame
from pygame.locals import *
import sys
import random
road = pygame.image.load(r"C:\Users\Binoy\Downloads\ezgif.com-gif-maker-0.jpg")
screen = pygame.display.set_mode((800,600))
class Enemy(pygame.sprite.Sprite):
def __init__(self,image):
pygame.sprite.Sprite.__init__(self) #call Sprite initializer
self.image = pygame.image.load(image)
self.rect=self.image.get_rect()
self.mask = pygame.mask.from_surface(self.image)
class Hero(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self) #call Sprite initializer
self.image = pygame.image.load("Untitled.png")
self.rect=self.image.get_rect()
self.mask = pygame.mask.from_surface(self.image)
hero=Hero()
enemy = Enemy("enemy.png")
enemy2 = Enemy("enemy 2.0.png")
enemy3 = Enemy("enemy 3.0.png")
enemy4 = Enemy("enemy 4.0.png")
if pygame.sprite.spritecollide(hero,enemy2,False,pygame.sprite.collide_mask):
print("sprites have collided!")
veLocity = 2
roadx = 0
roady = 0
x=200
y=400
y1=100
y2=350
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type== pygame.KEYDOWN and event.key ==pygame.K_LEFT:
x-=200
if x==-200:
x=0
elif event.type== pygame.KEYDOWN and event.key ==pygame.K_RIGHT:
x+=200
if x==800:
x=600
roady = roady + veLocity
if roady == 600:
roady = 0
y=y-2
y1-=2
y2-=2
if y==0:
y=600
if y1==0:
y1=600
if y2==0:
y2=600
screen.blit(road,[roadx,roady -600])
screen.blit(road,roady])
screen.blit(pygame.transform.scale(enemy.image,(150,150)),[0,y1-600])
screen.blit(pygame.transform.scale(enemy.image,y1])
screen.blit(pygame.transform.scale(enemy2.image,[400,y1-600])
screen.blit(pygame.transform.scale(enemy2.image,y1])
screen.blit(pygame.transform.scale(enemy3.image,[610,y2-600])
screen.blit(pygame.transform.scale(enemy3.image,y2])
screen.blit(pygame.transform.scale(enemy4.image,[200,y-600])
screen.blit(pygame.transform.scale(enemy4.image,y])
screen.blit(pygame.transform.scale(hero.image,[x,250])
pygame.display.update()
但是在运行脚本时它返回错误:
Traceback (most recent call last):
File "c:\Users\USERNAME\game.py",line 30,in <module>
if pygame.sprite.spritecollide(hero,pygame.sprite.collide_mask):
File "C:\Users\USERNAME\AppData\Roaming\Python\python39\site-packages\pygame\sprite.py",line 1665,in spritecollide
return [group_sprite
TypeError: 'Enemy' object is not iterable
那么任何人都可以在此代码中帮助我们并给出错误的解决方案。 谢谢。
解决方法
spritecollide
的第二个参数必须是 pygame.sprite.Group
。与敌人创建一个 Group 并进行碰撞测试:
hero=Hero()
enemy = Enemy("enemy.png")
enemy2 = Enemy("enemy 2.0.png")
enemy3 = Enemy("enemy 3.0.png")
enemy4 = Enemy("enemy 4.0.png")
enemies = pygame.sprite.Group([enemy,enemy2,enemy3,enemy4])
if pygame.sprite.spritecollide(hero,enemies,False,pygame.sprite.collide_mask):
print("sprites have collided!")
对于 2 个 pygame.sprite.Sprite
对象的碰撞,您可以直接使用 pygame.sprite.collide_mask
:
if pygame.sprite.collide_mask(hero,enemy):
print("sprites have collided!")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。