当鼠标光标悬停在图像上时,如何使某些事情发生

时间:2013-10-15 20:33:27

标签: python callback pygame

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

这是主屏幕代码的副本。 PS。我想出了我的问题,现在你可以看到我的代码了。(这是我主屏幕到目前为止的所有代码。感谢任何一个可以帮助我在鼠标悬停在图像上时检测它的人。)< / p>

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

2 个答案:

答案 0 :(得分: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。而且你最终不应该对这些坐标进行硬编码。

答案 1 :(得分:0)

我也曾经在pygame的按钮上这样做。 您应该考虑以下代码:

def is_hovering():
    mouse = pygame.mouse.get_pos()
    if mouse[0] > button_object.rect.x and mouse[0] < button_object.rect.x + button_object.rect.width and mouse[
        1] > button_object.rect.y and mouse[1] < button_b.rect.y + button_b.rect.height:
        return True
    else:
        return False