import pygame from pygame.constants import( QUIT, KEYDOWN, KEYUP, K_LEFT, K_RIGHT, K_ESCAPE, K_SPACE, MOUSEBUTTONDOWN) import os from random import randint class Settings: w_width = 800 w_height = 600 w_border = 50 file_path = os.path.dirname(os.path.abspath(__file__)) image_path = os.path.join(file_path, "pictures") class Background(object): def __init__(self, filename): self.imageo = pygame.image.load(os.path.join(Settings.image_path, filename)) self.image = pygame.transform.scale(self.imageo, (Settings.w_width, Settings.w_height)).convert() self.rect = self.image.get_rect() def draw(self, screen): screen.blit(self.image, self.rect)
I have here the bubbles class and i want to do it that when you click a bubble it despawns but i dont know how the bubbles detect the mouse cursor and how the bubbles despawn. I already tried to add the mouse position function but I dont know hot to use it. And I searched on the Internet but I found nothing about that.
class Bubble(pygame.sprite.Sprite): def __init__(self): super().__init__() self.width = 50 self.height = 300 self.image = pygame.image.load(os.path.join(Settings.image_path, "Blase.png ")).convert_alpha() self.image = pygame.transform.scale(self.image, (25, 25)) self.rect_br = (Settings.w_width//2) + 100, (Settings.w_height//2) + 100 self.rect = self.image.get_rect() self.mousex, self.mousey = pygame.mouse.get_pos() self.cx = self.width - 25 self.cy = self.height - 25 self.rect.left = randint(Settings.w_border, Settings.w_width - Settings.w_border) self.rect.top = randint(Settings.w_border, Settings.w_height - (Settings.w_border * 2)) def update(self): pass def scale_up(self): self.scale["width"] += 2 self.scale["height"] += 2 def scale_down(self): self.scale["width"] -= 2 self.scale["height"] -= 2 def events(self): pass def draw(self, screen): screen.blit(self.image,self.rect )
Here is where everythings run from the code
class Game(object): def __init__(self): self.screen = pygame.display.set_mode((Settings.w_width, Settings.w_height)) self.clock = pygame.time.Clock() self.runn = False self.background = Background("Hintergrund.png") self.bubble = pygame.sprite.Group() def run(self): self.runn = True while self.runn: self.clock.tick(60) self.watch_for_events() self.draw() self.events() def events(self): if len(self.bubble)< 100: self.bubble.add(Bubble()) time.sleep(0.2) def draw(self): self.background.draw(self.screen) self.bubble.draw(self.screen) pygame.display.flip() def watch_for_events(self): for event in pygame.event.get(): if event.type == QUIT: self.runn = False if __name__ == '__main__': os.environ['SDL_VIDEO_WINDOWS_POS'] = "50, 1100" pygame.init() game = Game() game.run() pygame.quit()
Thanks for Helping
Advertisement
Answer
“Despawn” a bubble by calling pygame.sprite.Sprite.kill
. kill
remove
the Sprite from all Groups. Use the MOUSEBUTTONDOWN
event and pygame.Rect.collidepoint
to determine if a bubble is clicked:
class Game(object): # [...] def watch_for_events(self): for event in pygame.event.get(): if event.type == QUIT: self.runn = False if event.type == MOUSEBUTTONDOWN: for bubble in self.bubble: if bubble.rect.collidepoint(event.pos): bubble.kill()