Pygame - Klik mouse tidak terdeteksi

Oct 09 2020

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

1 Rabbid76 Oct 09 2020 at 17:36

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.

YeshwinVermaTheProgrammer Oct 09 2020 at 17:46

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