13 파이썬 - Pygame
움직여보기
사용자가 키보드의 방향키를 누를 때마다 우리의 캐릭터가 움직이도록 할 예정입니다. 그렇기 때문에 캐릭터가 그려질 좌표를 변수에 저장 해놔야 하겠죠? 초기값으로 30을 줘보죠.
Python
x_pos = 50앞에서 방어하는 이미지를 추가했던 거처럼 이번에는 움직이는 이미지를 추가해볼까요?
Python
self.move = []
self.move.append(pygame.image.load("move_1.png"))
self.move.append(pygame.image.load("move_2.png"))
self.move.append(pygame.image.load("move_3.png"))
self.move.append(pygame.image.load("move_4.png"))이제 update는 캐릭터를 어느 좌표에 그려야 하는지도 같이 처리해주어야 합니다.
위에서 정의한 x_pos라는 변수를 이용하여 아래와 같이 사용해야 하죠
Python
self.rect = pygame.Rect(x_pos, 50, 64, 64)mode라는것을 이용해서 가만히 서있는지 움직이는지 구별하도록 하자구요. 그럼 mode값에 따라 가만히 서있는 이미지와 움직이는 이미지를 선택해주면 되겠죠?
Python
if mode == "idle" :
self.image = self.idle[self.index]
else :
self.image = self.move[self.index]앞에서 get_pressed()는 사용자가 누른 키보드 값을 우리에게 전달해주는것을 배웠죠?
Python
pressed = pygame.key.get_pressed()방향키를 이용하기로 하였었죠? 왼쪽, 오른쪽 방향키를 누르면 캐릭터가 좌, 우로 움직여야 하죠.
Python
if pressed[pygame.K_LEFT] :
x_pos = x_pos - 10
else pressed[pygame.K_RIGHT] :
x_pos = x_pos + 10이제 거의 다 끝났네요! 방향키를 눌렀다는 것은 이동을 한다는 것이니 mode를 "move"로 바꿔주어야 하겠죠? 방향키를 누르지 않는다면 다시 "idle"상태로 가고하고요.
Python
if pressed[pygame.K_LEFT] :
x_pos = x_pos - 10
mode = "move"
elif pressed[pygame.K_RIGHT] :
x_pos = x_pos + 10
mode = "move"
else :
mode = "idle"업데이트에 x_pos와 mode를 넘겨주면 완성!
Python
group.update(x_pos, mode)실행해 볼까요?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import pygame
pygame.init()
window = pygame.display.set_mode((500, 320))
is_end = False
x_pos = 50
clock = pygame.time.Clock()
class Sprite(pygame.sprite.Sprite):
def __init__(self):
super(Sprite, self).__init__()
self.idle = []
self.idle.append(pygame.image.load("idle_1.png"))
self.idle.append(pygame.image.load("idle_2.png"))
self.idle.append(pygame.image.load("idle_3.png"))
self.idle.append(pygame.image.load("idle_4.png"))
self.move = []
self.move.append(pygame.image.load("move_1.png"))
self.move.append(pygame.image.load("move_2.png"))
self.move.append(pygame.image.load("move_3.png"))
self.move.append(pygame.image.load("move_4.png"))
self.index = 0
self.mode = "idle"
self.image = self.idle[self.index]
def update(self, x_pos, mode):
self.rect = pygame.Rect(x_pos, 100, 64, 64)
self.index += 1
if self.index >= 4:
self.index = 0
if mode == "idle" :
self.image = self.idle[self.index]
else :
self.image = self.move[self.index]
sprite = Sprite()
group = pygame.sprite.Group(sprite)
while not is_end :
for event in pygame.event.get() :
if event.type == pygame.QUIT :
is_end = True
pressed = pygame.key.get_pressed()
if pressed[pygame.K_LEFT] :
x_pos = x_pos - 10
mode = "move"
elif pressed[pygame.K_RIGHT] :
x_pos = x_pos + 10
mode = "move"
else :
mode = "idle"
window.fill((255, 255, 255))
group.update(x_pos, mode)
group.draw(window)
pygame.display.update()
clock.tick(10)
pygame.quit()
quit()