2013-10-15 52 views
0

好的,我正在爲我的遊戲在主屏幕上工作,並且我有一個充當按鈕的圖像。 所以,當你點擊圖像上的某個位置時,圖像會改變,然後導入遊戲的下一部分。但我想要做的也是當鼠標懸停在圖像上時,它會發出聲音。但是,如何在鼠標懸停在按鈕圖像上時檢測它?當鼠標光標懸停在圖像上時,我該如何做些什麼

這是我的主屏幕代碼的副本。 PS。我想到了我的問題,現在你可以在這裏看到我的代碼(這是迄今爲止我的主屏幕上的所有代碼,任何人都可以幫助我檢測鼠標懸停在圖像上的情況。)

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 
+5

有幾件事情:1)你的文件不公開。 2)我(和其他人)很警惕將未知文件下載到我的機器上。你在發佈你的代碼時遇到了什麼問題? –

+0

請粘貼代碼的相關代碼段,以便我們可以幫助解決您的問題。 – Trein

+0

它一直說它看起來像你的帖子包含代碼。它告訴我要跳過一行並將所有代碼縮進4個空格。我試圖做它告訴我的,但它一直給我同樣的信息 – user2883997

回答

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。最終,你不應該對這些座標進行硬編碼。

+0

代替範圍,你可以使用[Rect.collidepoint()](http:// www .pygame.org/docs/ref/rect.html#Rect.collidepoint) – ninMonkey

+0

確定以便幫助,但它也會使其每次將鼠標放在圖像的側面時,它會播放聲音,並且會多次播放它。我想要做的是檢測它在圖像上的時間,並且只播放一次,如果我在鼠標仍然在圖像上時移動鼠標,它將不會再播放聲音,直到您將鼠標從圖像上取下,然後把它放在圖像上。 – user2883997

+0

@ user2883997:你需要一個狀態變量'in_image'。如果有一個命中並且'in_image'爲False,那麼它就會移入圖像中。如果有一個命中並且'in_image'爲True,那麼它仍然在之前的圖像中。如果沒有命中並且'in_image'爲True,則鼠標懸停。如果沒有命中並且'in_image'爲False,那麼鼠標停留在圖像之外。做你想要的每個案例 – Claudiu

相關問題