Python 我试图添加简单的碰撞到我的pygame游戏,但它不工作

Python 我试图添加简单的碰撞到我的pygame游戏,但它不工作,python,pygame,Python,Pygame,所以我正在创建一个类似胭脂的射击游戏,在这个游戏中,敌人穿过屏幕,如果你与他们相撞,你就会死亡和/或失去生命,但我似乎无法让碰撞发挥作用 下面是冲突代码行: hits = py.sprite.spritecollide(player, NPCs, True) if hits: running = False 下面是代码Main和sprite的其余部分(为了方便起见,去掉了图像): 将pygame导入为py 输入数学 随机输入 宽度=800 高度=600 FPS=60 #

所以我正在创建一个类似胭脂的射击游戏,在这个游戏中,敌人穿过屏幕,如果你与他们相撞,你就会死亡和/或失去生命,但我似乎无法让碰撞发挥作用

下面是冲突代码行:

hits = py.sprite.spritecollide(player, NPCs, True)
    if hits:
        running = False
下面是代码Main和sprite的其余部分(为了方便起见,去掉了图像):

将pygame导入为py
输入数学
随机输入
宽度=800
高度=600
FPS=60
#定义颜色
白色=(255,255,255)
黑色=(0,0,0)
红色=(255,0,0)
绿色=(0,255,0)
蓝色=(0,0255)
类播放器(py.sprite.sprite):
定义初始化(自):
py.sprite.sprite.\uuuuu初始化(自)
self.image=py.Surface((50,50),py.SRCALPHA)
self.image.fill(绿色)
self.rect=self.image.get_rect()
self.rect.centerx=宽度/2
self.rect.bottom=高度/2
self.Yspeed=0
self.rotatableimage=self.image
def更新(自我):
self.Xspeed=0
self.Yspeed=0
#下面的行允许按键等同于精灵的移动
keypresed=py.key.get_pressed()
如果采用键控方式[py.K_a]:
self.Xspeed=-11
如果设置了键[py.K_d]:
self.Xspeed=11
如果设置了KeyPreed[py.K_w]:
self.Yspeed=-11
如果设置了Keypreed[py.K_s]:
self.Yspeed=11
self.rect.x+=self.Xspeed
self.rect.y+=self.Yspeed
#下面的行允许精灵环绕屏幕
如果self.rect.left>宽度:
self.rect.right=0
如果self.rect.right<0:
self.rect.left=宽度
如果self.rect.top>高度:
self.rect.top=0
如果self.rect.bottom<0:
self.rect.bottom=高度
def旋转(自身、鼠标x、鼠标y):
rel_x=鼠标_x-self.rect.x
rel_y=鼠标_y-self.rect.y
角度=(180/math.pi)*-math.atan2(相对y,相对x)
self.image=py.transform.rotate(self.rotatableimage,int(角度))
self.rect=self.image.get_rect(中心=(self.rect.centerx,self.rect.centery))
返回
NPC类(py.sprite.sprite):
定义初始(自我,玩家):
py.sprite.sprite.\uuuuu初始化(自)
self.player=玩家
self.image=py.Surface((30,30)).convert_alpha()
self.image.fill(红色)
self.originalimage=self.image
self.rect=self.image.get_rect()
self.spawn()
def繁殖(自我):
self.direction=random.randrange(4)
如果self.direction==0:
self.rect.x=random.randrange(宽度-self.rect.WIDTH)
self.rect.y=random.randrange(-100,-40)
self.Xspeed=0
self.Yspeed=random.randrange(4,8)
elif self.direction==1:
self.rect.x=random.randrange(宽度-self.rect.WIDTH)
self.rect.y=random.randrange(高度,高度+60)
self.Xspeed=0
self.Yspeed=-random.randrange(4,8)
elif self.direction==2:
self.rect.x=random.randrange(-100,-40)
self.rect.y=random.randrange(高度-self.rect.HEIGHT)
self.Xspeed=random.randrange(4,8)
self.Yspeed=0
elif self.direction==3:
self.rect.x=random.randrange(宽度,宽度+60)
self.rect.y=random.randrange(高度-self.rect.HEIGHT)
self.Xspeed=-random.randrange(4,8)
self.Yspeed=0
def更新(自我):
self.rect.x+=self.Xspeed
self.rect.y+=self.Yspeed
dir_x,dir_y=self.player.rect.x-self.rect.x,self.player.rect.y-self.rect.y
self.rot=(180/math.pi)*math.atan2(-dir\ux,-dir\uy)
self.image=py.transform.rotate(self.originalimage,self.rot)
如果self.direction==0:
如果self.rect.top>高度+10:
self.spawn()
elif self.direction==1:
如果self.rect.bottom<-10:
self.spawn()
elif self.direction==2:
如果self.rect.left>宽度+10:
self.spawn()
elif self.direction==3:
如果self.rect.right<-10:
self.spawn()
我没有收到任何错误,但当我被NPC的“我需要帮助”击中时,它就是不起作用


另一方面,我想知道如何实现一个健康系统,我想我可以使用“点击”列表来实现它,但我对pygame so idk非常陌生。

spritegroup被称为
NPCs
with
NPCs=py.sprite.Group()
但是当你要将精灵添加到组中时,你把它拼错了

for i in range(14):
    n = NPC(player)
    all_sprites.add(n)
    NPC.add(n)   #no 's'

非常感谢你@大卡哈纳我觉得很傻,我反复检查了一遍,但没有找到fml。
import pygame as py
import math
import random


WIDTH = 800
HEIGHT = 600
FPS = 60

# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


class Player(py.sprite.Sprite):
    def __init__(self):
        py.sprite.Sprite.__init__(self)
        self.image = py.Surface((50, 50), py.SRCALPHA)
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT / 2
        self.Yspeed = 0
        self.rotatableimage = self.image

    def update(self):
        self.Xspeed = 0
        self.Yspeed = 0
        # line below allow for key press to equate to move of sprite
        keypreesed = py.key.get_pressed()
        if keypreesed[py.K_a]:
            self.Xspeed = - 11
        if keypreesed[py.K_d]:
            self.Xspeed = 11
        if keypreesed[py.K_w]:
            self.Yspeed = - 11
        if keypreesed[py.K_s]:
            self.Yspeed = 11
        self.rect.x += self.Xspeed
        self.rect.y += self.Yspeed
        # line below allow the sprite to wrap around the screen
        if self.rect.left > WIDTH:
            self.rect.right = 0
        if self.rect.right < 0:
            self.rect.left = WIDTH
        if self.rect.top > HEIGHT:
            self.rect.top = 0
        if self.rect.bottom < 0:
            self.rect.bottom = HEIGHT

    def rotate(self, mouse_x, mouse_y):
        rel_x = mouse_x - self.rect.x
        rel_y = mouse_y - self.rect.y
        angle = (180 / math.pi) * -math.atan2(rel_y, rel_x)

        self.image = py.transform.rotate(self.rotatableimage, int(angle))
        self.rect = self.image.get_rect(center=(self.rect.centerx, self.rect.centery))
        return


class NPC(py.sprite.Sprite):
    def __init__(self, player):
        py.sprite.Sprite.__init__(self)
        self.player = player
        self.image = py.Surface((30, 30)).convert_alpha()
        self.image.fill(RED)
        self.originalimage = self.image
        self.rect = self.image.get_rect()
        self.spawn()

    def spawn(self):
        self.direction = random.randrange(4)
        if self.direction == 0:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            self.Xspeed = 0
            self.Yspeed = random.randrange(4, 8)
        elif self.direction == 1:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(HEIGHT, HEIGHT+60)
            self.Xspeed = 0
            self.Yspeed = -random.randrange(4, 8)
        elif self.direction == 2:
            self.rect.x = random.randrange(-100, -40)
            self.rect.y = random.randrange(HEIGHT - self.rect.height)
            self.Xspeed = random.randrange(4, 8)
            self.Yspeed = 0
        elif self.direction == 3:
            self.rect.x = random.randrange(WIDTH, WIDTH+60)
            self.rect.y = random.randrange(HEIGHT - self.rect.height)
            self.Xspeed = -random.randrange(4, 8)
            self.Yspeed = 0

    def update(self):
        self.rect.x += self.Xspeed
        self.rect.y += self.Yspeed

        dir_x, dir_y = self.player.rect.x - self.rect.x, self.player.rect.y - self.rect.y
        self.rot = (180 / math.pi) * math.atan2(-dir_x, -dir_y)
        self.image = py.transform.rotate(self.originalimage, self.rot)

        if self.direction == 0:
            if self.rect.top > HEIGHT + 10:
                self.spawn()
        elif self.direction == 1:
            if self.rect.bottom < -10:
                self.spawn()
        elif self.direction == 2:
            if self.rect.left > WIDTH + 10:
                self.spawn()
        elif self.direction == 3:
            if self.rect.right < -10:
                self.spawn()
for i in range(14):
    n = NPC(player)
    all_sprites.add(n)
    NPC.add(n)   #no 's'