[Pygame] 03. 마우스로 조종하기

2023. 1. 30. 11:47·Minding's Programming/Pygame
728x90
반응형

이 글은 아래에 있는 강의 영상을 보고 작성했다.

https://www.youtube.com/watch?v=gt3Ff7l-Ajo&list=PLz2iXe7EqJOMp5LozvYa0qca9E4OBkevW&index=3 


Pygame으로 게임 만들기 - 2강 마우스로 조종하기

import pygame
# pygame을 실행할때는 init(), 종료할때는 quit()을 꼭 적어줘야 함!
pygame.init()

#창 크기 지정
background = pygame.display.set_mode((480, 360))
#창 이름 지정
pygame.display.set_caption('PYGAME_2')

# boolean 함수를 생성해 while문 작성
play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: #game의 event type이 QUIT 명령이라면
            play = False # while문을 종료시킴
        # 마우스와 관련된 이벤트 추가
        if event.type == pygame.MOUSEMOTION: # 마우스가 움직일 때
            print('MOUSEMOTION')
        if event.type == pygame.MOUSEBUTTONDOWN: # 마우스의 버튼을 눌렀을 때
            print('MOUSEBUTTONDOWN')
        if event.type == pygame.MOUSEBUTTONUP: # 마우스 버튼을 뗐을 때
            print('MOUSEBUTTONUP')

pygame.quit()
  • pygame.init()부터 while문, pygame.quit()까지는 pygame을 실행하기 위한 기본 구성이다.
  • pygame의 마우스 관련 메서드
    • MOUSEMOTION : 마우스가 움직일 때
    • MOUSEBUTTONDOWN : 마우스의 버튼이 눌렸을 때 (클릭, 휠 등등)
    • MOUSEBUTTONUP : 마우스의 버튼이 떼졌을 때
  • 위 코드를 실행하면 아래와 같이 출력된다.

 

>>>

MOUSEMOTION
MOUSEMOTION
MOUSEMOTION
MOUSEMOTION
MOUSEMOTION
MOUSEMOTION
MOUSEBUTTONDOWN
MOUSEBUTTONUP
MOUSEBUTTONDOWN
MOUSEBUTTONUP
MOUSEMOTION
MOUSEMOTION
MOUSEMOTION

 

마우스의 현재 좌표 print하기

pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
        if event.type == pygame.MOUSEMOTION:
            print(pygame.mouse.get_pos()) # 마우스의 현재 좌표를 반환하는 메서드
        if event.type == pygame.MOUSEBUTTONDOWN:
            print('MOUSEBUTTONDOWN')
        if event.type == pygame.MOUSEBUTTONUP:
            print('MOUSEBUTTONUP')

pygame.quit()

너무 길어서 캡처

  • mouse.get_pos()를 출력하면 마우스가 움직일 때마다 현재 좌표가 tuple의 형태로 반환된다.
  • 이를 응용해서 마우스 클릭 및 드래그 시의 좌표도 알아낼 수 있다.

 

마우스 각 버튼에 대한 event code 알아보기

  • 왼쪽 클릭, 휠 클릭, 오른쪽 클릭, 휠 올리기, 휠 내리기
pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
        if event.type == pygame.MOUSEMOTION:
            # print(pygame.mouse.get_pos())
            pass
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                print('왼쪽 클릭')
            elif event.button == 2:
                print('휠 클릭')
            elif event.button == 3:
                print('오른쪽 클릭')
            elif event.button == 4:
                print('휠 올리기')
            elif event.button == 5:
                print('휠 내리기')
        if event.type == pygame.MOUSEBUTTONUP:
            # print('MOUSEBUTTONUP')
            pass

pygame.quit()
  • event.button
    • 1 = 왼쪽 클릭
    • 2 = 휠 클릭
    • 3 = 오른쪽 클릭
    • 4 = 휠 올리기
    • 5 = 휠 내리기
  • 마우스 각 버튼에 대한 event code를 미리 알고 있으면 각 버튼에 대해 반응하는 코드를 만들 수 있다.

마우스를 이용해 원으로 선 그리기

pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

x_pos = 0 # x좌표
y_pos = 0 # y좌표

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
        if event.type == pygame.MOUSEMOTION:
            x_pos, y_pos = pygame.mouse.get_pos() # 현재 마우스의 좌표를 받아서
            pygame.draw.circle(background, (255,0,255), (x_pos,y_pos), 10) # 해당 위치에 원 그리기
        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1: # 왼쪽 버튼 클릭시
                background.fill((0,0,0)) # 배경 검정색으로 초기화
                
        pygame.display.update()
        
pygame.quit()
  • 마우스가 움직일 때 원이 그려지고 클릭 시 배경이 채워지는 구조
  • 원이 지워지지 않고 이어지면서 선이 그려짐

시연 영상

 

 

원으로 마우스 포인터만들기

pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

# 원의 위치가 가운데 오도록
x_pos = background.get_size()[0]//2 # 240
y_pos = background.get_size()[1]//2 # 180

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
        if event.type == pygame.MOUSEMOTION:
            x_pos, y_pos = pygame.mouse.get_pos() # 현재 마우스의 좌표를 받아서
            
        background.fill((0,0,0)) # 이젠에 있었던 원 배경으로 덮고
        pygame.draw.circle(background, (255,0,255), (x_pos, y_pos), 10) # 새로운 좌표에 새로운 원 그림
        pygame.display.update()
        
pygame.quit()
  • 배경으로 먼저 덮고 원을 새로 그리는 구조이기 때문에 원이 이어지지 않음
  • 원이 마우스 포인터처럼 (포인터를 따라) 움직임

시연 영상

 

 

728x90

'Minding's Programming > Pygame' 카테고리의 다른 글

[Pygame] 06. 키보드와 마우스로 이미지 움직이기  (0) 2023.02.04
[Pygame] 05. 이미지 사용하기  (0) 2023.02.01
[Pygame] 04. 도형 그리기  (0) 2023.01.31
[Pygame] 02. 키보드로 조종하기  (0) 2023.01.27
[Pygame] 01. Pygame 설치 및 설치 확인하기  (0) 2023.01.25
'Minding's Programming/Pygame' 카테고리의 다른 글
  • [Pygame] 05. 이미지 사용하기
  • [Pygame] 04. 도형 그리기
  • [Pygame] 02. 키보드로 조종하기
  • [Pygame] 01. Pygame 설치 및 설치 확인하기
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    FastAPI
    Python
    게임개발
    야구
    파이썬
    에어플로우
    django python
    메이저리그
    데이터분석
    칼만필터는어렵지않아파이썬
    MLB
    Airflow
    프로그래머스
    KalmanFilter
    칼만필터는어렵지않아python
    데이터 엔지니어
    딥러닝
    AWS
    파이썬게임개발
    코딩테스트
    칼만필터는어렵지않아
    pygame
    넘파이
    질롱코리아
    칼만필터
    mlb stats api
    머신러닝
    django
    파이게임
    KBO
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Pygame] 03. 마우스로 조종하기
상단으로

티스토리툴바