본문 바로가기

Minding's Programming/Pygame

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

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