如何取得和設定滑鼠的資訊和狀態(位置,移動距離,按鍵狀態,指標可見性等)
訂閱 375
本節內容不涉及滑鼠事件的講解,要了解如何處理滑鼠事件,請檢視如何處理遊戲中的滑鼠,鍵盤事件一節。
Pygame 中的 mouse 模組
Pygame 的mouse
模組,提供了一些與滑鼠相關的函式,可以幫助開發者取得或設定滑鼠的資訊和狀態,比如,滑鼠的位置,滑鼠按鍵的按下狀態。當然,在處理與滑鼠相關的事件時,滑鼠的資訊也可能會由Event
事件物件提供。
請確保 Pygame 能夠自行處理事件
如果希望mouse
模組中的函式能夠正常工作,那麽應在遊戲迴圈中呼叫event
模組的pump
函式,該函式能夠讓 Pygame 自行處理事件。當然,event
模組的某些函式會隱含的呼叫pump
,比如get
函式(當其參數pump
為True
時)。
事件
關於如何讓 Pygame 自行處理事件,請檢視讓 Pygame 自行處理事件佇列中的事件一段。
取得和設定滑鼠在遊戲視窗中的位置
Pygame 取得和設定滑鼠的位置座標影片示範 YouTube
mouse
模組的函式get_pos
和set_pos
,可用於取得和設定滑鼠相對於遊戲視窗顯示區域左上角的相對位置(座標)。如果滑鼠位於左上角的右方,那麽位置的水平座標為正數,如果滑鼠位於左上角的下方,那麽位置的垂直座標為正數。當設定滑鼠位置時,將引發滑鼠移動事件(對應pygame
模組的MOUSEMOTION
變數)。
get_pos()
- 傳回值
get_pos
函式傳回一個形式類似於(x,y)
的整數元組,表示滑鼠距離視窗顯示區域左上角的相對位置,其中x
為水平方向的座標,y
表示垂直方向的座標。當滑鼠位於視窗顯示區域之外時,
get_pos
函式可能傳回(0,0)
。
set_pos(x, y)
set_pos(pos)
- x 參數
x
參數是一個浮點數,表示滑鼠相對於視窗顯示區域左上角的水平方向座標。- y 參數
y
參數是一個浮點數,表示滑鼠相對於視窗顯示區域左上角的垂直方向座標。- pos 參數
pos
參數是一個序列物件,需要依次包含表示滑鼠相對於視窗顯示區域左上角的水平座標和垂直座標的浮點數。
set_pos 函式不會將滑鼠的位置固定
函式set_pos
可以將滑鼠移動至某個位置,但其效果是一次性的,如果你希望滑鼠被固定在某個位置,那麽可在遊戲迴圈中不斷的呼叫該函式。
# 匯入相關模組,建立遊戲視窗
from pygame import display, event, mouse
display.set_mode((800, 600))
while True:
# 明確的呼叫 pump 函式
event.pump()
# 取得滑鼠位置
(x, y) = mouse.get_pos()
# 當滑鼠位於視窗左上角時,他將被移至中心
if x < 100 and y < 100:
mouse.set_pos([400, 300])
# 當滑鼠位於視窗右下角時,結束遊戲迴圈
if x > 700 and x < 800 and y > 500 and y < 600:
break
取得滑鼠在遊戲視窗中的移動距離
Pygame 取得滑鼠移動距離,以及判斷移動方向影片示範 YouTube
mouse
模組的get_rel
函式,可用於取得滑鼠在遊戲視窗顯示區域中的移動距離,該距離相對於上一次呼叫此函式時的滑鼠位置。通過函式get_rel
,可間接的判斷滑鼠的移動方向。
get_rel()
- 傳回值
get_rel
函式傳回一個形式類似於(x,y)
的整數元組,表示滑鼠在視窗顯示區域中的移動距離,其中x
為水平距離(為正數表示滑鼠相對於上一次向右進行了移動,為負數表示向左進行了移動),y
表示垂直距離(為正數表示滑鼠相對於上一次向下進行了移動,為負數表示向上進行了移動)。
在下面的範例中,按下滑鼠按鍵,將呼叫get_rel
並顯示滑鼠的水平移動距離和垂直移動距離。
# 匯入相關模組,建立遊戲視窗
from pygame import display, event, mouse, MOUSEBUTTONDOWN
display.set_mode((800, 600))
running = True
while running:
# 隱含的呼叫 pump 函式
for e in event.get():
if e.type == MOUSEBUTTONDOWN:
# 取得滑鼠的移動距離
(x, y) = mouse.get_rel()
print('水平移動距離', x, '垂直移動距離', y)
# 如果實際的移動距離大於 400,則遊戲迴圈結束
d = (x**2 + y**2) ** 0.5
print('實際移動距離', d)
if d > 400:
running = False
取得滑鼠按鍵的按下狀態
Pygame 取得滑鼠按鍵的按下狀態影片示範 YouTube
mouse
模組的get_pressed
函式,可用於一次性取得滑鼠上多個按鍵的按下狀態。
get_pressed(num_buttons=3)
- num_buttons 參數
num_buttons
參數只能是3
或5
。如果設定為3
,則取得滑鼠左按鍵,滾輪按鍵和右按鍵的按下狀態,如果設定為5
,則還將取得第四個按鍵和第五個按鍵的按下狀態。- 傳回值
根據所傳遞的
num_buttons
參數,get_pressed
函式將傳回形式類似於(l,m,r)
或(l,m,r,b4,b5)
的元組。其中,l
對應滑鼠左按鍵,m
對應滑鼠滾輪按鍵,r
對應滑鼠右按鍵,b4
對應滑鼠上的第四個按鍵,b5
對應滑鼠上的第五個按鍵。
在下面的範例中,如果同時按下滑鼠的左鍵,右鍵和滾輪鍵,那麽遊戲將結束。
# 匯入相關模組,建立遊戲視窗
from pygame import display, event, mouse
display.set_mode((800, 600))
while True:
# 明確的呼叫 pump 函式
event.pump()
# 取得滑鼠按鍵的按下狀態
(l, m, r) = mouse.get_pressed()
# 如果滑鼠左健,右鍵和滾輪鍵一同按下,那麽遊戲迴圈結束
if l and r and m:
break
取得和設定滑鼠指標是否可見
Pygame 控製滑鼠指標是否可見影片示範 YouTube
mouse
模組的函式get_visible
和set_visible
,可用於取得和設定滑鼠指標在遊戲視窗中是否可見。
get_visible()
- 傳回值
如果
get_visible
函式傳回True
,則表示滑鼠指標可見,否則表示不可見。
set_visible(value)
- value 參數
如果
value
參數等價於True
,那麽滑鼠指標可見,否則不可見。
在下面的範例中,如果點選滑鼠左鍵,則將切換滑鼠的可見狀態,如果點選滑鼠右鍵,則將結束遊戲。
# 匯入相關模組和變數,建立遊戲視窗
from pygame import display, event, mouse, QUIT, MOUSEBUTTONUP, BUTTON_LEFT, BUTTON_RIGHT
display.set_mode((800, 600))
running = True
while running:
# 隱含的呼叫 pump 函式
for e in event.get():
if e.type == QUIT:
running = False
elif e.type == MOUSEBUTTONUP:
if e.button == BUTTON_LEFT:
# 取得滑鼠的可見狀態,並反轉
v = mouse.get_visible()
mouse.set_visible(not v)
elif e.button == BUTTON_RIGHT:
# 結束遊戲迴圈
running = False
判斷滑鼠是否位於遊戲視窗中
mouse
模組的get_focused
函式,可用於判斷滑鼠是否位於遊戲視窗的顯示區域之中,基本等同於判斷遊戲視窗是否能夠接收到滑鼠的輸入。
get_focused()
- 傳回值
如果
get_focused
函式傳回True
,則表示滑鼠位於視窗顯示區域之中,否則位於顯示區域之外。
在下面的範例中,我們通過函式get_focused
判斷滑鼠是否位於顯示區域,如果滑鼠離開或進入顯示區域的次數達到5
,則遊戲迴圈將結束。
# 匯入相關模組,建立遊戲視窗
from pygame import display, event, mouse
display.set_mode((800, 600))
count = 0
focused = True
while True:
# 明確的呼叫 pump 函式
event.pump()
# 判斷滑鼠是否離開了顯示區域
if focused and not mouse.get_focused():
focused = False
count += 1
print('滑鼠離開了顯示區域')
# 判斷滑鼠是否進入了顯示區域
if not focused and mouse.get_focused():
focused = True
count += 1
print('滑鼠進入了顯示區域')
# 切換次數達到 5 次時,結束遊戲
if count == 5:
break
內容分類
原始碼
講解影片
Pygame 取得和設定滑鼠的位置座標·YouTube
Pygame 取得滑鼠移動距離,以及判斷移動方向·YouTube
Pygame 取得滑鼠按鍵的按下狀態·YouTube
Pygame 控製滑鼠指標是否可見·YouTube