0

好的,所以我正在为我的游戏制作主屏幕,并且我有一个充当按钮的图像。因此,当您单击图像上的某个位置时,图像会发生变化,然后导入游戏的下一部分。但我也想做的是,当鼠标悬停在图像上时,它会播放声音。但是我如何让它检测鼠标何时悬停在按钮图像上?

这是我的主屏幕代码的副本。附言。我发现了我的问题,现在您可以在这里查看我的代码。(这是迄今为止我的主屏幕的所有代码。感谢任何可以帮助我检测鼠标何时悬停在图像上的人。)

import pygame, sys, random
import time

B_images = ["startbutton.png", "startbuttonpush.png"]

class BClass(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("startbutton.png")
        self.rect = self.image.get_rect()
        self.rect.center = [310, 500]




def animate():
    screen.fill([0,0,0])
    screen.blit(B.image,B.rect)
    pygame.display.flip()



pygame.init()
x = y = 0
pos = pygame.mouse.get_pos()
pygame.display.set_caption("Skier")
screen = pygame.display.set_mode([640,640])
B = BClass()
font = pygame.font.Font(None, 50)
ButtonSound = pygame.mixer.Sound('ButtonSound.ogg')

while True:
    animate()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                import End.py
        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            if ( x in range(229,391)) and (y in range(470,530)):
                B.image = pygame.image.load("startbuttonpush.png")
                animate()
                time.sleep(0.1)
                import skier.py
4

2 回答 2

2

要检测鼠标悬停,请执行与检测鼠标单击相同的操作,除了在pygame.MOUSEMOTION事件上执行此操作。每次检测到鼠标移动时都会调用此方法。

    if event.type == pygame.MOUSEMOTION:
        x, y = event.pos
        if ( x in range(229,391)) and (y in range(470,530)):
            print "Hovering over image!"

另请注意,这x in range(229, 391)是超级低效的,你应该这样做229 <= x <= 391。最后,您不应该对这些坐标进行硬编码。

于 2013-10-16T17:06:43.897 回答
0

我曾经也在 pygame 中的按钮上执行此操作。您应该考虑以下代码:

def is_hovering():
    mouse = pygame.mouse.get_pos()
    if button_object.rect.collidepoint(mouse):
        return True
    else:
        return False
于 2020-11-21T10:12:42.190 回答