글 작성자: Doublsb

전 시간 자료 : http://doublsb.tistory.com/59

저번 시간에는 맵 씬(Scene_Map) 스크립트를 해부해 보았다.


이번 시간에는 맵 씬 스크립트의 응용으로, 메뉴 호출 키를 변경해 보자.




메뉴 호출은 보통 B키(키보드 X키)를 눌렀을 때 이루어진다.

B키에 대응되는 키를 변경하는 건 게임 창에서 F1을 누르거나, properties에 들어가 수정하는 것만으로 가능하긴 하다.


그럼에도 불구하고 이번 시간에 굳이 메뉴 호출 키를 스크립트로 변경해보는 이유는 Input 기능에 대해 알아보기 위해서이다.

우선 메뉴 호출을 관리하는 메소드를 보도록 하자.


  

 def update_call_menu

    if $game_system.menu_disabled || $game_map.interpreter.running?

      @menu_calling = false

    else

      @menu_calling ||= Input.trigger?(:B)

      call_menu if @menu_calling && !$game_player.moving?

    end

  end



이와 같은 스크립트에서 버튼을 눌렀을 때 메뉴를 부르는 구문은 어디일까?

바로, @menu_calling ||= Input.trigger?(:B)이다.


Input.trigger?(:키 이름)은 어떤 키가 눌렸는지 인식하는 구문이다.

예를 들어서, Input.trigger?(:A)라고 물어본다면 A버튼이 눌렸는지 게임이 인식하게 된다.


그럼 B버튼 말고, 메뉴 호출을 X버튼으로 할 수 있도록 한번 바꾸어 보자.


 

 def update_call_menu

    if $game_system.menu_disabled || $game_map.interpreter.running?

      @menu_calling = false

    else

      @menu_calling ||= Input.trigger?(:X)

      call_menu if @menu_calling && !$game_player.moving?

    end

  end



이렇게 스크립트를 수정해버리면, 앞으로 메뉴는 X버튼으로밖에 호출할 수 없다.


그렇다면 B버튼(취소 키)과 C버튼(결정 키)을 동시에 눌러야만 메뉴를 호출할 수 있게 하려면 어떻게 수정해야 할까?


 

 def update_call_menu

    if $game_system.menu_disabled || $game_map.interpreter.running?

      @menu_calling = false

    else

      @menu_calling ||= Input.trigger?(:A) && Input.trigger?(:B)

      call_menu if @menu_calling && !$game_player.moving?

    end

  end



다음과 같이 수정하면 된다. &&는 조건을 동시에 만족해야 함을 의미한다. 그러나 이렇게 바꾸면 문제가 생긴다.

바로, 정확한 타이밍에 B버튼과 C버튼을 눌러야만 메뉴를 호출할 수 있다는 것이다.


그럼 어떻게 스크립트를 수정해야 인식하도록 할 수 있을까?


앞에서는 Input.trigger만 소개했지만, RPG Maker에서는 Input 메소드에 세 가지 종류가 제시되어 있다.


첫번째로, Input.press?(:키 이름)이다. press라는 단어에서 알 수 있듯이 이 구문은 키를 누르고 있어야 작동된다.

누르고 있는 동안은 키를 인식하고, 누르고 있지 않는 상태에서는 인식하지 않는 구문이다.


두번째로, Input.trigger?(:키 이름)이다. press와는 작은 차이점이 있는데, trigger는 누르고 있는 동안을 인식하는 것이 아니라 키를 눌렀다 뗐을 때를 인식한다.


마지막으로, Input.repeat?(:키 이름)이다. trigger와는 달리, 키가 반복해서 눌릴 경우를 고려한다. 키가 반복해서 눌릴 때 인식하는 시간이 점점 빨라지는 구문이라고 생각하면 될 것 같다. 이 부분은 사용했을 때 trigger와 비교하여 차이를 느끼지 못했던 구문이라, 잘 모르겠다.


이렇게 세 가지의 Input 메소드가 있을 때, B버튼과 C버튼을 동시에 눌렀을 때 메뉴를 호출할 수 있도록 하려면 무엇이 가장 좋을까?


바로, 두 입력 모두 press를 사용하는 것이다. press를 사용해 두 버튼 모두 눌린 상태를 인식하면 메뉴 창이 호출될 것이다. 직접 한번 수정해 보자.


 

 def update_call_menu

    if $game_system.menu_disabled || $game_map.interpreter.running?

      @menu_calling = false

    else

      @menu_calling ||= Input.press?(:A) && Input.press?(:B)

      call_menu if @menu_calling && !$game_player.moving?

    end

  end



다음과 같이 수정했더니, 결정 키와 취소 키를 둘 다 눌러야만 메뉴가 호출된다.




오늘의 목표는 달성했지만, 짚고 넘어가야 할 부분이 한가지 더 있다.

Input 기능으로 RPG Maker 툴에서 인식할 수 있는 키가 제한되어 있다는 걸 알고 있는가? 인식 가능 키에는 무엇이 있는지 한 번 알아보자.


 

DOWN LEFT RIGHT UP

아래, 왼쪽, 오른쪽, 위 화살표 키를 의미한다.

A B C X Y Z L R

인식 가능한 버튼의 갯수는 8가지이다. 이 때, 각 버튼은 키보드 버튼과 일치하지 않는다.

B버튼의 경우 취소키로, 키보드에서는 ESC, 0번 키, X키를 눌러야 인식하게 되어 있다.

이 키들은 플레이어가 게임 창에서 F1키를 누르거나, Properties에 들어가 수정할 수 있다.

SHIFT CTRL ALT

시프트, 컨트롤, 알트 키를 의미한다.

F5 F6 F7 F8 F9

F5, F6, F7, F8, F9키를 의미한다.

Input.dir4

오른쪽 키패드 2, 4, 6, 8을 체크한다. 4방향 체크 기능이다.

Input.dir8

오른쪽 키패드 1, 2, 3, 4, 6, 7, 8, 9를 체크한다. 8방향 체크 기능이다.



Input 기능으로 인식할 수 있는 키는 이처럼 얼마 되지 않는다. 보통은 키 확장 스크립트를 사용해 인식할 수 있는 키의 갯수를 늘린다.

스크립트를 사용하지 않는다면 인식할 수 있는 키는 이것뿐이니 주의해야 한다.




요약


1. 키 입력은 Input.press?(:키 이름), Input.trigger?(:키 이름), Input.repeat?(:키 이름)으로 인식할 수 있다.


2. RPG Maker에서 인식할 수 있는 키는 제한되어 있다.





이번 강좌는 피드백을 적극적으로 받는다. 틀린 부분을 댓글로 달아주시면 수정할 수 있도록 하겠다.

반응형