微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用精灵组和杀死精灵组

如何解决如何使用精灵组和杀死精灵组

代码

import pygame

def enemie():
    global speed_x
    ball.y += speed_x

    if ball.colliderect(player):
        groups.kill()


pygame.init()
running = True

clock = pygame.time.Clock()

speed_x = 10

ball = pygame.Rect(250,20,20)
player = pygame.Rect(250,450,50,50)
screen = pygame.display.set_mode((500,500))

Groups = pygame.sprite.Group()
Groups.add(ball)
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
                running = False
    enemie()

    screen.fill((255,255,255)) #color

    pygame.draw.ellipse(screen,[0,255],player)
    pygame.draw.ellipse(screen,[255,0],ball)
    pygame.display.flip()

    clock.tick(30)
pygame.quit()

错误


TypeError: pygame.sprite.AbstractGroup.add() argument after * must be an iterable,not int

During handling of the above exception,another exception occurred:

AttributeError: 'int' object has no attribute 'add_internal'

During handling of the above exception,another exception occurred:

TypeError: unhashable type: 'pygame.Rect'

首先,我以前从未见过如此巨大的错误。我正在尝试创建一个游戏,其中您有一个球从上方传来,当它接触到您的蓝色角色时,红球将被删除。我一切都很好,直到我试图在触球时将球移开。我使用了一个精灵组,所以我可以“杀死”这个组。我在这里做错了什么?

解决方法

你不能杀死一个精灵,但你可以杀死一个精灵kill 从所有组中删除一个精灵。您只需将 pygame.sprite.Sprite 对象转换为 pygame.sprite.Groupball 只是一个 pygame.Rect 对象。因此它不能添加到


工作示例:

import pygame

def enemie():
    global speed_x
    ball.rect.y += speed_x
    if ball.rect.colliderect(player.rect):
        player.kill()

pygame.init()
screen = pygame.display.set_mode((500,500))
clock = pygame.time.Clock()

# ball sprite
ball = pygame.sprite.Sprite()
ball.rect = pygame.Rect(250,20,20)
ball.image = pygame.Surface((20,20),pygame.SRCALPHA)
pygame.draw.circle(ball.image,(255,0),(10,10),10)
speed_x = 10

# player sprite
player = pygame.sprite.Sprite()
player.rect = pygame.Rect(250,450,50,50)
player.image = pygame.Surface((50,50),pygame.SRCALPHA)
pygame.draw.circle(player.image,(0,255),(25,25),25)

# group with all sprites
group = pygame.sprite.Group()
group.add(ball)
group.add(player)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
                running = False
    enemie()

    screen.fill((255,255,255)) #color
    group.draw(screen)
    pygame.display.flip()
    clock.tick(30)

pygame.quit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。