2008-12-19 219 views
5

讓你的精靈響應PyGame中鼠標點擊的規範方法是什麼?如何響應PyGame中的精靈鼠標點擊?

下面是簡單的東西,在我的事件循環:

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     exit_game() 
    [...] 
    elif ( event.type == pygame.MOUSEBUTTONDOWN and 
      pygame.mouse.get_pressed()[0]): 
     for sprite in sprites: 
      sprite.mouse_click(pygame.mouse.get_pos()) 

關於它的一些問題:

  1. 這是響應鼠標點擊的最好方法?
  2. 如果鼠標持續按住精靈一段時間會怎麼樣?我如何製作一個單獨的事件?
  3. 這是一種合理的方式來通知所有我的精靈的點擊?

在此先感謝

回答

10

我經常給我的點擊對象,點擊功能,就像在你的榜樣。我將所有這些對象放在列表中,以便在調用點擊函數時輕鬆進行迭代。

當檢查您按下的鼠標按鈕時,使用事件的按鈕屬性。

import pygame 
from pygame.locals import * #This lets you use pygame's constants directly. 

for event in pygame.event.get(): 
    if event.type == MOUSEBUTTONDOWN: #Better to seperate to a new if statement aswell, since there's more buttons that can be clicked and makes for cleaner code. 
     if event.button == 1: 
      for object in clickableObjectsList: 
       object.clickCheck(event.pos) 

我會說這是推薦的方法。點擊只註冊一次,所以它不會告訴你的精靈,如果用戶正在用按鈕「拖動」。這可以通過使用MOUSEBUTTONDOWN事件設置爲true的布爾值以及使用MOUSEBUTTONUP設置爲false來輕鬆完成。有可拖動的「可拖動」對象來迭代以激活它們的功能......等等。

但是,如果你不想使用的事件處理程序,可以讓一個更新功能檢查與輸入:

pygame.mouse.get_pos() 
pygame.mouse.get_pressed(). 

這是一個較大的項目是一個壞主意,因爲它可以創建硬找到錯誤。更好的是把事件保存在一個地方。較小的遊戲,如簡單的街機遊戲,但使用探測風格可能會更有意義。

+0

謝謝。關於`event.button == 1`部分,在PyGame中是否沒有常量而不是顯式1? – 2008-12-26 14:29:26