초급강의실
2016.04.05 11:27

Input 객체의 키코드 확장

조회 수 562 추천 수 0 댓글 8
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

 

Input.isPressed(keyName) 함수 또는 Input.isTriggered(keyName) 함수로 해당 키가 눌려있는지 확인을 해야 할 때 
 
해당 키코드가 없다면 키코드를 확장해야만 합니다. 
 
결론부터 말하자면, 이것은 굉장히 간단합니다
 
RPG Maker MV 에서는 Input 객체의 소스 코드가 공개되어있기 때문입니다.
 
다음과 같이, Input.keyMapper 라는 JSON 타입의 변수에 keyCode(키코드)와 keyName(키의 이름)을 설정해주면 됩니다.
 
키의 이름은 원하는 이름을 지정할 수 있지만, 키코드는 표준 키코드를 지정해줘야 합니다.
 
표준 키코드는 이 링크를 참고하시기 바랍니다.
 
1
Input.keyMapper[keyCode] = 'keyName';
cs
 
예제에서는 T 키를 눌렀을 때 메시지 박스를 띄워보도록 하겠습니다.
 
키코드 API 를 참고해보면 T 키의 keyCode 가 84 라는 것을 알 수 있습니다.
 
6.PNG

 

그러면 아래과 같이 키코드를 설정해줄 수 있습니다.
 
1
Input.keyMapper[84= 'T';
cs

 

이렇게 설정한 것을, 플러그인이나 스크립트로 만들어 실행을 해주면 정상적으로 처리가 됩니다. 

 
이제, 아래와 같은 스크립트를 병렬 이벤트로 실행시켜보면,
 
1
2
3
if(Input.isPressed('T')) {
 alert("T 를 눌렀습니다");
}
cs
 
아래와 같이 T 키를 눌렀을 때 메시지 박스가 뜨게 됩니다.
 
7.PNG

 

?
  • ?
    A구몽 2016.04.14 10:14
    RPGmakerVX ace 에서 키코드 확장은 어떻게되는지 알려주실 수 있나요?
  • profile
    러닝은빛 2016.04.14 19:06
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx

    윈도우에서 제공하는 위 링크와 같은 키보드 API 함수를 Win32API 로 바인딩하여 Input 객체를 확장해야 합니다. 프로그래밍이 필요한 부분이므로 직접 작성할 계획이 아니시라면 전체키 스크립트를 찾아보시기 바랍니다.
  • ?
    A구몽 2016.04.15 17:30
    네... 뭔가 어렵군요.
  • ?
    A구몽 2016.04.15 17:45
    루비자체에서 지원하는 라이브러리 메소드는 없나요?
    키의 입력 상태로 진릿값을 반환해준다거나...
  • profile
    러닝은빛 2016.04.16 20:56
    루비는 윈도우에 의존성이 있는 것이 아니기 때문에 키보드 함수 같은 것은 없습니다. 라이브러리 쪽은 있을 수 있겠으나, 알만툴에 포함되어있는 루비는 개발사에서 수정한 거라 라이브러리를 사용할 수 없게 해놨습니다. 루비에는 좋은 라이브러리가 많지만 사용할 수 없기 때문에 전체키 스크립트 같은게 만들어진 것입니다.
  • ?
    A구몽 2016.04.17 13:16
    아... 이런...
    답변 감사합니다.
  • profile
    gcyong 2017.08.28 02:36
    여담이지만 GetAsyncKeyState함수는 MSB를 조사하셔야 합니다. 러닝은빛님께서 올려주신 링크에 리턴값에 대해 자세히 설명되어있습니다.
    그리고 당연하지만 키가 눌릴 때 까지 반환하지 않는 함수가 아닙니다. 반복문으로 원하는 키가 눌릴 때 까지 조사하셔야 합니다. 따라서 본 게임 제어를 흐릴 수 있으므로 키를 따로 받기 위해서는 CreateThread(https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms682453(v=vs.85).aspx)와 같은 함수도 필요할겁니다. 키를 따로 받는 스레드와 게임쪽 스레드를 유지한 상태에서 키가 눌렸을 때 적절한 처리를 해야합니다.
  • profile
    gcyong 2017.08.28 02:38
    참고로, Win32App으로 작성하시면 굳이 GetAsyncKeyState 함수가 아니라도 윈도우 메시지로 가상 키 코드를 받을 수 있습니다. 윈도우가 직접 WndProc 콜백함수로 보내주거든요. 다만, 콘솔이나 RPG만들기처럼 이런 콜백함수를 따로 정의할 수 없을 때는 GetKeyState함수나 GetAsyncKeyState 함수를 사용합니다. (아주 예전에 듣기로는 GetKeyState보다 Async를 쓰라고 한 것 같습니다만 정확하지는 않습니다.)

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 초급강의실 게임제작강좌 A-Z 색인 (2016.1.24 ver) 1 file 천무 2016.01.12 3378 1
185 초급강의실 [MV] Iavra Splash Video(스플래시/인트로영상 제작 시 스킵기능 부여 플러그인) file 이니군 2017.09.11 185 0
184 초급강의실 RPG MAKER MV Tool Program-MADO 설치 및 적용기 1 file 이니군 2017.09.08 649 0
183 초급강의실 커먼이벤트로 은행시스템 만들기(23:00 그림 링크 재수정) 3 file 이니군 2017.08.28 584 0
182 초급강의실 RPG 메이커 MV 도움말 한글 번역 1 에이치H 2017.07.20 802 0
181 고급강의실 [RMMV] 크로노 엔진(Chrono Engine) 플러그인 사용법 러닝은빛 2017.07.16 347 1
180 중급강의실 네코플에서 VXA 선택지 잘리는 버그 해결하는법 file 심심치 2017.06.22 172 0
179 초급강의실 변수를 이용한 식물 재배 3 file MoonJ 2017.05.28 1426 2
178 초급강의실 누구나 쉽게 따라할 수 있는 액션/슈팅 이벤트 만들기! 3 file 이제리아 2017.01.26 670 2
177 중급강의실 RPG란 무엇인가?가 하는 강의-1편:대쉬 속도와 걷는 속도를 어떻게 바꾸는가?- 3 file RPG란무엇인가? 2016.10.31 818 0
176 중급강의실 쯔꾸르 게임을 네코플레이어에 최적화 시켜보자! # 해상도 편 17 file 양갱님 2016.04.17 15399 9
175 초급강의실 게임의 퀼리티를 높이자! 3편-맵배치 2 ifeve 2016.04.08 2608 2
» 초급강의실 Input 객체의 키코드 확장 8 file 러닝은빛 2016.04.05 562 0
173 초급강의실 초보가쓰는 초보용 Rpg게임 만들기 (xp) 6 Marine 2016.03.13 4776 0
172 초급강의실 [동영상] 게임을만들자 (8편) - 맵에 포그, 광원적용 - 2 file 천무 2016.02.27 1376 0
171 초급강의실 [동영상] 게임을만들자 (7편) - 열쇠로 여는 문 만들기 - 3 file 천무 2016.02.23 2506 0
170 초급강의실 MV에서 이벤트로만 액션RPG를 만들기 file 델군 2016.02.19 1984 0
169 초급강의실 [동영상] 게임을만들자 (6편) - 맵배치 초보강좌 - 2 file 천무 2016.02.17 2218 0
168 고급강의실 [MV플러그인] Armor Scaling 강의 1 file 백난화백 2016.02.13 3065 2
167 고급강의실 [MV플러그인] Action Sequence 강의 5 file 백난화백 2016.02.12 3725 1
166 초급강의실 [동영상] 게임을만들자 (5편) - 퀘스트 만들기 - 3 file 천무 2016.02.11 2910 1
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)