2008-12-19 75 views
5

Cách kinh điển để tạo các sprites của bạn phản ứng với các cú click chuột trong PyGame là gì?Làm cách nào để tôi phản hồi các lần nhấp chuột trên các hình họa tiết trong PyGame?

Dưới đây là một cái gì đó đơn giản, trong vòng lặp sự kiện của tôi:

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     exit_game() 
    [...] 
    elif ( event.type == pygame.MOUSEBUTTONDOWN and 
      pygame.mouse.get_pressed()[0]): 
     for sprite in sprites: 
      sprite.mouse_click(pygame.mouse.get_pos()) 

Một số câu hỏi về nó:

  1. Đây có phải là cách tốt nhất để đối phó với cú click chuột?
  2. Điều gì sẽ xảy ra nếu chuột vẫn được nhấn trên sprite một thời gian? Làm cách nào để tạo một sự kiện đơn lẻ?
  3. Đây có phải là cách hợp lý để thông báo cho tất cả các lần nhấp chuột của tôi không?

Cảm ơn trước

Trả lời

10

tôi thường cung cấp cho nhấp được tôi đối tượng một chức năng nhấp chuột, như trong ví dụ của bạn. Tôi đặt tất cả các đối tượng đó vào danh sách, để lặp lại dễ dàng khi các hàm bấm được gọi.

khi kiểm tra nút chuột bạn nhấn, sử dụng thuộc tính nút của sự kiện.

import pygame 
from pygame.locals import * #This lets you use pygame's constants directly. 

for event in pygame.event.get(): 
    if event.type == MOUSEBUTTONDOWN: #Better to seperate to a new if statement aswell, since there's more buttons that can be clicked and makes for cleaner code. 
     if event.button == 1: 
      for object in clickableObjectsList: 
       object.clickCheck(event.pos) 

Tôi cho rằng đây là cách được khuyến nghị thực hiện. Các nhấp chuột chỉ đăng ký một lần, do đó, nó sẽ không nói cho sprite của bạn nếu người dùng là "kéo" với một nút. Điều đó có thể dễ dàng được thực hiện với một boolean được thiết lập là true với sự kiện MOUSEBUTTONDOWN, và sai với MOUSEBUTTONUP. Các đối tượng "có thể kéo" được lặp lại để kích hoạt các chức năng của chúng ... và vân vân.

Tuy nhiên, nếu bạn không muốn sử dụng phương thức thụ lý sự kiện, bạn có thể cho một kiểm tra cập nhật chức năng cho đầu vào với:

pygame.mouse.get_pos() 
pygame.mouse.get_pressed(). 

Đây là một ý tưởng tồi cho các dự án lớn hơn, vì nó có thể tạo ra khó khăn để tìm lỗi. Tốt hơn là chỉ giữ các sự kiện ở một nơi. Trò chơi nhỏ hơn, như trò chơi arcade đơn giản có thể có ý nghĩa hơn bằng cách sử dụng phong cách thăm dò mặc dù.

+0

Cảm ơn. Về phần 'event.button == 1', không có hằng số thay vì 1 trong PyGame rõ ràng? –

+0

Tôi không nghĩ là cần thiết. 1 luôn là nút bên trái, 2 ở giữa và 3 là bên phải. 3 là ngay cả trên chuột với chỉ có hai nút. – Zoomulator

Các vấn đề liên quan