使pygame sprite在python

时间:2016-09-26 17:37:52

标签: python pygame

我正在进行一场RPG比赛,我希望我的按钮在按下后立即消失。有没有办法可以做到这一点? 我有不同的游戏状态:游戏,菜单,开始 播放按钮将出现在START游戏状态中,我希望它在按下时或游戏状态发生变化时消失。 感谢您的贡献

2 个答案:

答案 0 :(得分:0)

如果按钮确实是一个精灵,你可以:

  • 将精灵添加到名为Buttons的组中。
  • 在屏幕上渲染按钮。
  • 使用kill()方法从Buttons组中删除精灵。
  • 在下一轮重新渲染屏幕。

http://pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite.kill

答案 1 :(得分:0)

要从屏幕上删除某些内容,您需要在屏幕上绘制其他内容。所以最基本的答案就是停止渲染按钮并开始渲染其他东西。

一个很好的方法是让所有可见对象都继承pygame.sprite.Sprite并将它们放在sprite groups中。从这里你可以轻松地绘制,更新和删除精灵。

这是一个有效的例子。按键1,2或3可以制作"按钮"再次出现:

import pygame
pygame.init()

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


class Button(pygame.sprite.Sprite):
    def __init__(self, pos, size=(32, 32), image=None):
        super(Button, self).__init__()
        if image is None:
            self.rect = pygame.Rect(pos, size)
            self.image = pygame.Surface(size)
        else:
            self.image = image
            self.rect = image.get_rect(topleft=pos)
        self.pressed = False

    def update(self):
        mouse_pos = pygame.mouse.get_pos()
        mouse_clicked = pygame.mouse.get_pressed()[0]
        if self.rect.collidepoint(*mouse_pos) and mouse_clicked:
            print("BUTTON PRESSED!")
            self.kill()  # Will remove itself from all pygame groups.

image = pygame.Surface((100, 40))
image.fill((255, 0, 0))
buttons = pygame.sprite.Group()
buttons.add(
    Button(pos=(50, 25), image=image),
    Button(pos=(50, 75), image=image),
    Button(pos=(50, 125), image=image)
)

while True:
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_1:
                buttons.add(Button(pos=(50, 25), image=image))
            elif event.key == pygame.K_2:
                buttons.add(Button(pos=(50, 75), image=image))
            elif event.key == pygame.K_3:
                buttons.add(Button(pos=(50, 125), image=image))

    buttons.update()  # Calls the update method on every sprite in the group.

    screen.fill((0, 0, 0))
    buttons.draw(screen)  # Draws all sprites to the given Surface.
    pygame.display.update()