Pygame - Fare tıklamaları algılanmıyor
Python ile oyunlar yapmak için Pygame öğreniyorum. Ancak bir sorunla karşılaşıyorum. Oynatıcının şu anda ekrana tıkladığını tespit etmeye çalışıyorum, ancak kodum çalışmıyor. Kodum gerçekten berbat mı, yoksa kullandığım çevrimiçi Pygame derleyicisi mi?
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")
Bu kodu çalıştırdığımda, çıktı konsolu saniyede binlerce kez "Tıklıyorsunuz" metnini spam gönderdi. Ekrana tıklamadığım zamanlarda bile bunu söylüyor. Farem ekranın üzerinde olmadığında bile . Sadece aynı metin. Tekrar ve tekrar. Pygame programımı doğru bir şekilde yürütüyor mu?
Pygame'i öğrenmek için geliştiricilerin resmi Dokümanlarını kullanıyorum. https://www.pygame.org/docs/ Bu, eski bir öğrenme yolu mu, bu yüzden kodum hata vermeye devam ediyor mu?
Yanıtlar
Tarafından döndürülen koordinatlar https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.get_pressedolaylar işlendiğinde değerlendirilir. Olayları ikisinden birine göre işlemeniz gerekir:https://www.pygame.org/docs/ref/event.html#pygame.event.pump veya https://www.pygame.org/docs/ref/event.html#pygame.event.get.
Görmek https://www.pygame.org/docs/ref/event.html#pygame.event.get:
Oyununuzun her karesi için, olay kuyruğuna bir tür çağrı yapmanız gerekecektir. Bu, programınızın işletim sisteminin geri kalanıyla dahili olarak etkileşime girmesini sağlar.
https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.get_pressedtüm fare düğmelerinin durumunu temsil eden bir boole dizisi döndürür. Hense, eğer değerlendirmek zorundasınhttps://docs.python.org/3/library/functions.html#anydüğmesine basılırsa ( any(buttons)) veya abonelikle özel bir düğmeye basılırsa (örn. buttons[0]).
Örneğin:
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()
Sadece fare düğmesine ne zaman basıldığını ve ne zaman serbest bırakıldığını algılamak istiyorsanız, o zaman MOUSEBUTTONDOWNve MOUSEBUTTONUP(bkz.https://www.pygame.org/docs/ref/event.html modülü):
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()
İken pygame.mouse.get_pressed()döner düğmeler mevcut durumu, MOUSEBUTTONDOWNve MOUSEBUTTONUPbir düğmeye basıldığında sadece bir kez gerçekleşir.
Pygame.mouse.get_pressed işlevi true veya false içeren bir liste döndürür, bu nedenle tek tıklama için u kullanmalısınız-
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")