2011-08-21 76 views
1

爲了學習的目的,我正在製作一個Pong克隆,並且需要從屏幕中間移動球(當它經過一個槳時發送到那裏),當鼠標被按下。我試過下面的代碼,但它什麼都不做,所以我可能不理解語法。儘量保持它儘可能簡單,並解釋它,我寧願沒有50行代碼(我想了解我在這裏使用的一切)。我認爲這是所有相關的代碼,如果不是這樣,對不起。謝謝。在Python中按下鼠標時移動一個精靈

def middle(self): 
    """Restart the ball in the centre, waiting for mouse click. """ 
    # puts ball stationary in the middle of the screen 
    self.x = games.screen.width/2 
    self.y = games.screen.height/2 
    self.dy = 0 
    self.dx = 0 

    # moves the ball if mouse is pressed 
    if games.mouse.is_pressed(1): 
     self.dx = -3 
+1

你是否在使用任何一種類似pygame的庫?在中間調用()期間,鼠標被按下的檢查也會發生一次。如果你在那一刻沒有按下鼠標,球就不會移動。 – arunkumar

+0

我正在使用livewires。我將代碼移到了Ball的update()函數中,但是當我單擊鼠標時它仍然沒有任何作用。我確信我不是問是否按照正確方式按下了鼠標。 – Matt

+0

很可能。 Livewires似乎沒有通過在線文檔的方式,所以我無法查找它。但看看他們是否有一個鼠標事件處理程序的東西。在這種情況下,您可以嘗試在鼠標單擊事件處理程序中設置「self.dx = -3」。 – arunkumar

回答

0

這是不可能確切地知道什麼是基於該代碼段發生的事情,但它看起來像你使用了錯誤的功能,以檢測鼠標按鈕是否被按下。

Screen.is_pressed來自遊戲模塊包裝pygame.key.get_pressed,它只能檢測鍵盤按鍵的狀態,而不是鼠標按鍵。您可能需要功能Screen.mouse_buttons,其中包含pygame.mouse.get_pressed。你可以像這樣的循環中使用它(我會假裝你有games.Screen一個實例稱爲「屏幕」):

left, middle, right = screen.mouse_buttons() 
# value will be True if button is pressed 
if left: 
    self.dx = -3 
0

我在看同樣的問題作爲一個初學者Python打碼機 - Games.py(修訂版1.7 )包括幾種不同類別的is_pressed方法,包括鍵盤和鼠標。

class Mouse(object): 

#other stuff then 
def is_pressed(self, button_number): 
    return pygame.mouse.get_pressed()[button_number] == 1 

因爲pygame的是一個編譯的模塊(我有1.9.1),指的是文件,而不是源代碼,我發現here有一個pygame.mouse.get_pressed(): 的將得到狀態鼠標按鍵

get_pressed() -> (button1, button2, button3) 

所以我覺得這個問題是(Y)我們的代碼,而不是使用錯誤功能的使用這個.....的

OK得到這個工作 - 我的FIX:

class myClass(games.Sprite): 
    def update(self): 
     if games.mouse.is_pressed(0)==1: 
      self.x=games.mouse.x 
      self.y=games.mouse.y 

調用Main()會導致選定的精靈移動到鼠標位置。 HTH