728x90
반응형
728x90
반응형
🙆♂️ 입력 감지
#입력 감지
for event in pygame.event.get():
.
.
print(event)
이렇게 입력 감지를 해볼 수 있습니다.
실행을 하고 a키와 d키를 눌러보니 이렇게 출력이 됐습니다.
신기한거는 마우스 이동에 따른 좌표도 기록되는 것이였습니다.
이를 통해서 다른 게임도 만들 수 있겠네요.
이제 이 입력된 키를 특정해보는 코드를 작성해보겠습니다.
if event.type == pygame.KEYDOWN:
print(event)
위 처럼 이벤트가 KEYDOWN인 것만 필터링 해서 보면 잘 나오는 모습입니다.
이번에는 a키만 입력됐을 때만 출력하게 하면
if event.type == pygame.KEYDOWN:
if event.key == 97:
print("Insert a")
이렇게 잘 나오는 모습입니다.
이런식으로 여러 키들을 감지하고 감지했을 때 다른 동작들을 할 수 있게 짤 수 있을 것 같습니다.
# 4. 메인 이벤트
# 변수 설정
.
.
leftMove=False
rightMove=False
.
.
.
#wasd or 방향키 입력 감지
if event.type == pygame.KEYDOWN:
if event.key == 97:
leftMove = True
elif event.key == 100:
rightMove = True
elif event.type == pygame.KEYUP:
if event.key == 97:
leftMove = False
elif event.key == 100:
rightMove = False
.
.
.
# 4.3 입력과 시간에 따른 변화
if leftMove == True:
hero.x -= hero.move
elif rightMove == True:
hero.x += hero.move
이런식으로 짜면 좌우를 왔다리 갔다리 할 수 있습니다.
이제 계속해서 완성된 코드를 보여드리면
속도 줄어드는 키
#이동 값(bool) 초기화
leftMove=False
rightMove=False
topMove = False
bottomMove = False
.
.
.
#wasd or 방향키 입력 감지
#KeyDown되면 활성화
if event.type == pygame.KEYDOWN:
if event.key == 97 or event.key == 1073741904:
leftMove = True
if event.key == 100 or event.key == 1073741903:
rightMove = True
if event.key == 115 or event.key == 1073741905:
bottomMove = True
if event.key == 119 or event.key == 1073741906:
topMove = True
#KeyUp 되면 비활성화
elif event.type == pygame.KEYUP:
if event.key == 97 or event.key == 1073741904:
leftMove = False
if event.key == 100 or event.key == 1073741903:
rightMove = False
if event.key == 115 or event.key == 1073741905:
bottomMove = False
if event.key == 119 or event.key == 1073741906:
topMove = False
.
.
.
#해당 키가 눌리면 이동
if leftMove == True:
hero.x -= hero.move
if rightMove == True:
hero.x += hero.move
if topMove == True:
hero.y -= hero.move
if bottomMove == True:
hero.y += hero.move
어디든 이동이 가능해졌습니다.
근데 이제 이동하면 안되는데 까지 가기 때문에 예외처리를 해야합니다.
# 4.3 입력과 시간에 따른 변화
#해당 키가 눌리면 이동
if leftMove == True:
hero.x -= hero.move
#화면에 벗어나지 않도록
if hero.x <= 0:
hero.x = 0
if rightMove == True:
hero.x += hero.move
#화면에 벗어나지 않도록
if hero.x >=size[0]-hero.oX:
hero.x = size[0]-hero.oX
if topMove == True:
hero.y -= hero.move
#화면에 벗어나지 않도록
if hero.y <= 0 :
hero.y = 0
if bottomMove == True:
hero.y += hero.move
#화면에 벗어나지 않도록
if hero.y >= size[1]-hero.oY:
hero.y = size[1]-hero.oY
위의 주석에 화면에 벗어나지 않도록이라고 적힌 if문을 추가한 것입니다.
자세히 보면 hero.x의 좌표가 0보다 작아지면 0으로 세팅하고 size[0] 즉 화면의 가로길이보다 커지면
가로길이로 설정하면 되는데 이 비행기의 길이 값은 빼야해서 위의 코드처럼 설정했고
y값도 같은 맥락으로 설정했습니다.
728x90
반응형
'앱 개발 > pygame' 카테고리의 다른 글
[pygame] 07. 적 생성 (0) | 2022.09.27 |
---|---|
[pygame] 06. 총알 쏘기 (1) | 2022.09.22 |
[pygame] 04. 코드 클래스화 (1) | 2022.09.19 |
[pygame] 03. 캐릭터 넣기 (0) | 2022.09.17 |
[pygame] 02. 게임 초기 설정 2 (0) | 2022.09.13 |