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 |