繁体   English   中英

object如何检测pygame中的鼠标

[英]How can a object detect the mouse in pygame

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)

我这里有气泡 class,我想这样做,当您单击气泡时它会消失,但我不知道气泡如何检测鼠标 cursor 以及气泡如何消失。 我已经尝试添加鼠标 position function 但我不知道如何使用它。 我在互联网上搜索,但我没有找到任何相关信息。

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 )

这是一切从代码运行的地方

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()

感谢您的帮助

通过调用pygame.sprite.Sprite.kill来“消除”气泡。 kill从所有组remove Sprite。 使用MOUSEBUTTONDOWN事件pygame.Rect.collidepoint确定是否单击了气泡:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM