当前位置: 首页 > 知识库问答 >
问题:

Pygame群撞不起作用

艾哲
2023-03-14

为了练习python和pygame编程,我正在创建一个太空入侵者克隆体。我使用pygame.sprite.groupcollide来检查玩家的子弹和敌人之间的碰撞,这很好。然而,我尝试过在子弹摧毁敌人后使用那种碰撞检查来增加玩家的分数。因此,我创建了两个分数类,它们有自己的图像,在子弹击中敌人后会发生变化,以便保持分数。然而,即使这两个类几乎相同,一个类的碰撞检查工作正常,而另一个类则不行。最令人困惑的事实是,如果我改变顺序,将它们添加到一个组或不同的组中,一个将停止工作,另一个将得到修复。代码如下:

...
_image_library = {}
def get_image (path):
    global _image_library
    image = _image_library.get (path)
    if image == None:
        canonicalized_path = path.replace ("/", os.sep).replace ("\\", os.sep)
        image = pygame.image.load (canonicalized_path)
        _image_library [path] = image
    return image
...
score_rect_1 = pygame.Rect (680,540,42,57)
score_rect_2 = pygame.Rect (740,540,42,57)
...    
class Score_cards_1 (pygame.sprite.Sprite):
    def __init__ (self):
        pygame.sprite.Sprite.__init__ (self)
        self.images = []
        self.images.append (get_image ("number_0.1.png").convert_alpha())
        self.images.append (get_image ("number_1.1.png").convert_alpha())
        self.images.append (get_image ("number_2.1.png").convert_alpha())
        self.images.append (get_image ("number_3.1.png").convert_alpha())
        self.images.append (get_image ("number_4.1.png").convert_alpha())
        self.images.append (get_image ("number_5.1.png").convert_alpha())
        self.images.append (get_image ("number_6.1.png").convert_alpha())
        self.images.append (get_image ("number_7.1.png").convert_alpha())
        self.images.append (get_image ("number_8.1.png").convert_alpha())
        self.images.append (get_image ("number_9.1.png").convert_alpha())
        self.score = 0
        self.rect = score_rect_1

    def update (self):
        if pygame.sprite.groupcollide (player_bullet,flying_v,True,True):
            self.score += 1
        if self.score >= len (self.images):
            self.score = 0
        self.image = self.images [self.score]

class Score_cards_2 (pygame.sprite.Sprite):
    def __init__ (self):
        pygame.sprite.Sprite.__init__ (self)
        self.images = []
        self.images.append (get_image ("number_0.png").convert_alpha())
        self.images.append (get_image ("number_1.png").convert_alpha())
        self.images.append (get_image ("number_2.png").convert_alpha())
        self.images.append (get_image ("number_3.png").convert_alpha())
        self.images.append (get_image ("number_4.png").convert_alpha())
        self.images.append (get_image ("number_5.png").convert_alpha())
        self.images.append (get_image ("number_6.png").convert_alpha())
        self.images.append (get_image ("number_7.png").convert_alpha())
        self.images.append (get_image ("number_8.png").convert_alpha())
        self.images.append (get_image ("number_9.png").convert_alpha())
        self.score = 0
        self.rect = score_rect_2

    def update (self):
        if pygame.sprite.groupcollide (player_bullet, flying_v,True,True):
            self.score += 1
        if self.score >= len (self.images):
            self.score = 0
        self.image = self.images [self.score]
...

global score_cards
score_cards = pygame.sprite.Group ()
score_cards.add (Score_cards_1())
score_cards.add (Score_cards_2())

...

while not done:

    ...
    score_cards.update ()
    ...
    score_cards.draw ()
    ...

我知道分数没有被保存或任何东西,但我想先让简单的部分起作用。

共有1个答案

狄奕
2023-03-14

如果试图将类添加到组中,则必须使用这些类创建对象,然后将它们添加到组

score_card1_object = Score_Cards_1()
score_card2_object = Score_Cards_2()
score_cards = pygame.sprite.Group()
score_cards.add(score_card_object1)
score_cards.add(score_card_object2)
 类似资料:
  • 当我尝试检测两个矩形之间的碰撞时当我启动程序时,它只打印“HIT”一次 我还尝试使用但出现此错误: 回溯(最近调用最后): 文件“D:/蟒蛇/PyCharm/test/src/Main/test.py”,第 104 行, 命中 = pygame.sprite.spritecollide(player_sprites,enemy_sprites,1) 文件“D:\程序\蟒蛇\lib\site-pac

  • 我正在尝试使代码中的冲突检测正常工作。我正在使用矢量,我希望玩家精灵在与称为的精灵组碰撞时碰撞并停止。问题是玩家可以通过底墙。 在这个例子中,我关闭了重力。 x冲突是可以的,但它有点滑稽,只有y方向不能正常工作与相同的代码。 我已经尝试使用调试器调试代码,但没有成功。 我主要感兴趣的是弄清楚为什么垂直碰撞检测不起作用,但我也希望得到关于水平碰撞检测的建议。 友情链接: 吉特哈布 : 完整代码 当前

  • 我有一个问题的角色移动pyplay。我想做的是能够按住钥匙,让精灵移动。但是,我必须继续敲击键让精灵移动。任何帮助将不胜感激!这是我的代码: 谢谢

  • 所以我试图用Python和Pyplay创建一个益智平台游戏,但是我遇到了一点麻烦。当我为主要角色使用单点图像,而不是矩形图像时,如何制作碰撞检测器?我知道直角图像有左、右、顶部和底部像素功能(这对冲突检测非常有用),但是对于单片图像有这样的功能吗?或者我只需要为x和y坐标创建一个变量图像的宽度/高度?我试过用那个 但是catImg一直在通过窗户的尽头。我做错了什么?提前谢谢。

  • 我正在用Python创建一个乒乓游戏(很明显),我是Pyplay的新手,所以我想要一些帮助,当球碰到桨时,它会反转速度,朝相反的方向移动。到目前为止,一切都正常,但是当球到达桨时,它会穿过桨,不会改变方向。我已经解决了,所以桨不会离开屏幕,当球遇到墙时,球会改变方向,但当球遇到桨时,不会。任何帮助或提示将不胜感激。 我的划桨课: 我的球课 我的目标是当球触到球拍或反弹(重叠点)时,使球的速度反向(

  • 我是蟒蛇/蟒蛇游戏的新手。我已经能够在小型测试程序中拼凑出一些东西,但试图掌握碰撞并没有发生。我尝试过学习多个教程,但我觉得我需要它完全分解,然后才能很好地理解它。 有人能解释一下像CollidRect(Rect)这样的东西是如何工作的吗?我需要一个碰撞函数的类,还是只需要两个矩形就可以得到结果? 我尝试使用的代码如下。我能够制作两个图像,每个图像都由一个矩形包围,我假设碰撞仅适用于精灵而不是图像