对象如何在 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,我想这样做,当您单击气泡时它会消失,但我不知道气泡如何检测鼠标光标以及气泡如何消失。
我已经尝试添加鼠标定位功能,但我不知道如何使用它。
我在互联网上搜索过,但没有找到任何相关信息。
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
the Sprite from all Groups. Use the MOUSEBUTTONDOWN
event and 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()
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,我想这样做,当您单击气泡时它会消失,但我不知道气泡如何检测鼠标光标以及气泡如何消失。 我已经尝试添加鼠标定位功能,但我不知道如何使用它。 我在互联网上搜索过,但没有找到任何相关信息。
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
the Sprite from all Groups. Use the MOUSEBUTTONDOWN
event and 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()