앱 개발/pygame

[pygame] 05. 캐릭터 움직이기

내만 2022. 9. 22. 08:49
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