Pygame - Klik mouse tidak terdeteksi
Saya belajar Pygame membuat game dengan Python. Namun, saya mengalami masalah. Saya mencoba mendeteksi ketika pemain saat ini mengklik layar, tetapi kode saya tidak berfungsi. Apakah kode saya benar-benar kacau, atau hanya kompiler Pygame online yang saya gunakan?
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
while True:
pygame.display.update()
mouse = pygame.mouse.get_pressed()
if mouse:
print("You are clicking")
else:
print("You released")
Ketika saya menjalankan kode ini, konsol keluaran mengirim spam teks "You are click", ribuan kali dalam satu detik. Bahkan saat saya tidak mengklik layar, ia tetap mengatakan ini. Bahkan saat mouse saya tidak berada di atas layar. Teks yang sama. Lagi dan lagi. Apakah Pygame menjalankan program saya dengan benar?
Untuk mempelajari Pygame, saya menggunakan Dokumen resmi dari pengembang. https://www.pygame.org/docs/ Apakah ini cara belajar yang sudah ketinggalan zaman, apakah ini sebabnya kode saya terus mengalami kesalahan?
Jawaban
Koordinat yang dikembalikan oleh https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.get_presseddievaluasi saat kejadian ditangani. Anda perlu menangani acara dengan baikhttps://www.pygame.org/docs/ref/event.html#pygame.event.pump atau https://www.pygame.org/docs/ref/event.html#pygame.event.get.
Lihat https://www.pygame.org/docs/ref/event.html#pygame.event.get:
Untuk setiap frame game Anda, Anda perlu melakukan panggilan ke antrean acara. Ini memastikan program Anda dapat berinteraksi secara internal dengan seluruh sistem operasi.
https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.get_pressedmengembalikan urutan boolean yang mewakili status semua tombol mouse. Hense Anda harus mengevaluasi jikahttps://docs.python.org/3/library/functions.html#anytombol ditekan ( any(buttons)) atau jika tombol khusus ditekan dengan berlangganan (misalnya buttons[0]).
Contohnya:
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
buttons = pygame.mouse.get_pressed()
# if buttons[0]: # for the left mouse button
if any(buttons): # for any mouse button
print("You are clicking")
else:
print("You released")
pygame.display.update()
Jika Anda hanya ingin mendeteksi ketika tombol mouse dilepaskan masing-masing, maka Anda harus menerapkan MOUSEBUTTONDOWNdan MOUSEBUTTONUP(lihathttps://www.pygame.org/docs/ref/event.html modul):
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
print("You are clicking", event.button)
if event.type == pygame.MOUSEBUTTONUP:
print("You released", event.button)
pygame.display.update()
Saat pygame.mouse.get_pressed()mengembalikan status tombol saat ini, MOUSEBUTTONDOWNdan MOUSEBUTTONUPhanya terjadi setelah tombol ditekan.
Fungsi pygame.mouse.get_pressed mengembalikan daftar yang berisi benar atau salah jadi untuk satu klik Anda harus menggunakan-
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.display.update()
mouse = pygame.mouse.get_pressed()
if mouse[0]:
print("You are clicking")
else:
print("You released")