Pygame의 스프라이트에 대한 마우스 클릭에 어떻게 응답합니까?

StackOverflow https://stackoverflow.com/questions/380420

  •  22-08-2019
  •  | 
  •  

문제

Sprites가 Pygame의 마우스 클릭에 반응하는 표준적인 방법은 무엇입니까?

내 이벤트 루프에는 간단한 것이 있습니다.

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

그것에 대한 몇 가지 질문 :

  1. 이것이 마우스 클릭에 응답하는 가장 좋은 방법입니까?
  2. 마우스가 한동안 스프라이트에 눌려지면 어떻게됩니까? 하나의 이벤트를 어떻게 만들려면?
  3. 이것이 내 모든 스프라이트에 클릭을 알리는 합리적인 방법입니까?

미리 감사드립니다

도움이 되었습니까?

해결책

나는 보통 당신의 예에서와 같이 클릭 가능한 객체에 클릭 함수를 제공합니다. 클릭 함수를 호출 할 때 쉽게 반복 할 수 있도록 모든 객체를 목록에 넣었습니다.

어떤 마우스 버튼을 누르는 지 확인할 때 이벤트의 버튼 속성을 사용하십시오.

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)

나는 이것이 권장되는 방법이라고 말할 것입니다. 클릭은 한 번만 등록하므로 사용자가 버튼으로 "드래그"하는 경우 스프라이트를 알려줍니다. 마우스 버트 론 타운 이벤트와 함께 True로 설정된 부울로 쉽게 수행 할 수 있으며 MouseButtonup에서는 거짓입니다. 이 기능을 활성화하기 위해 반복 된 "드래그 가능한"객체가 있습니다.

그러나 이벤트 핸들러를 사용하지 않으려면 업데이트 기능이 입력을 확인할 수 있습니다.

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

이것은 버그를 찾기가 어려울 수 있기 때문에 더 큰 프로젝트에는 나쁜 생각입니다. 한곳에서 이벤트를 유지하는 것이 좋습니다. 단순한 아케이드 게임과 같은 작은 게임은 프로브 스타일을 사용하여 더 의미가있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top