Pygame - Fare tıklamaları algılanmıyor

Oct 09 2020

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

1 Rabbid76 Oct 09 2020 at 17:36

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.

YeshwinVermaTheProgrammer Oct 09 2020 at 17:46

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")