소스 코드 보기 : https://github.com/a-mean-blogger/text-game-maker-js/blob/master/src/managers/input-manager/input-manager_keyboard.js
클라스(TM.IObject를 상속받음)
**이 클라스는 TM.InputManager의 하위 항목으로 사용하기 위해 만들어졌습니다. 그래서 클라스이름이 InputManager_로 시작합니다.키보드 입력을 확인하기 위한 인스턴스를 생성하는 클라스입니다. TM.InputManager의 인스턴스 생성시 keyboard 항목에 이 인스턴스가 자동으로 생성됩니다.
Text Game Maker JS에서 key state는 함수가 실행되는 순간의 키 상태를 뜻합니다.
Text Game Maker JS에서 key pressed는 이전에 체크한 시간 이후로 해당 키가 눌려진 적이 있는지를 뜻합니다.
key state와 key pressed의 한번에 체크하는 함수들입니다.
**예제 소스 코드 보기: input-manager_keyboard-tutorial.js
var TMS(Text Game Maker Screen)에 TM.ScreenManager의 인스턴스를 생성합니다.
var TMI(Text Game Maker Inputs)에 TM.InputManager의 인스턴스를 생성합니다. TMI.keyboard에 TM.InputManager_Keyboard의 인스턴스가 자동으로 생성됩니다.
var TMS = new TM.ScreenManager(), TMI = new TM.InputManager(null, true);
사용할 key의 key code들을 알아보기 쉽게 KEYSET 객체를 만들어 넣어줍니다. 이 키값은 TMI = new TM.InputManager(null,true);로 TMI를 생성하면 키입력이 있을 때마다 브라우저 콘솔에 표시가 됩니다.
var KEYSET = { A: 65, S: 83, D: 68, };
TM.Interval 클라스로 0.2초 마다 키입력을 확인하는 인스턴스를 만듭니다.
A 키는 checkKeyState 함수를 이용해 확인하고, S 키는 checkKeyPressed 함수를 이용해 확인하고, D 키는 checkKey 함수를 이용해 확인합니다.
var myInputMgr = new TM.Interval(200,function(){ var textA = "TMI.keyboard.checkKeyState(KEYSET.A)"; if(TMI.keyboard.checkKeyState(KEYSET.A)) TMS.insertTextAt(1,1,textA); else TMS.deleteTextAt(1,1,textA); var textS = "TMI.keyboard.checkKeyPressed(KEYSET.S)"; if(TMI.keyboard.checkKeyPressed(KEYSET.S)) TMS.insertTextAt(1,2,textS); else TMS.deleteTextAt(1,2,textS); var textD = "TMI.keyboard.checkKey(KEYSET.D)"; if(TMI.keyboard.checkKey(KEYSET.D)) TMS.insertTextAt(1,3,textD); else TMS.deleteTextAt(1,3,textD); }) myInputMgr.init();
이 스크린을 먼저 클릭한 다음 키입력을 해 주어야 키입력이 확인됩니다.
현재 페이지의 브라우저 콘솔을 연 다음 아래의 명령어들을 입력하여 바로 테스트해 봅시다.
혹시 단축키로 브라우저 콘솔이 열리지 않는다면, 스크린을 제외한 다른 부분을 한번 클릭한 다음 단축키를 입력해 주세요. 스크린은 다른 키입력을 차단합니다.
//TMI.keyboard 비활성화 TMI.keyboard.inactivate(); //TMI.keyboard를 다시 활성화
TMI.keyboard.init();
키입력이 있는 경우 콘솔에 해당 키의 code를 출력하는 것을 볼 수 있습니다. 이것으로 키보드의 키값을 알 수 있습니다.
위 예제를 통해 checkKeyState, checkKeyPressed, checkKey의 차이점을 알 수 있습니다.
checkKeyState 함수로 확인하는 A키는 빠르게 눌렀다가 때는 경우 가끔씩 모니터에 아무런 문자열이 나타나지 않는 것을 알 수 있습니다. 이는 0.2초마다 키입력을 확인하는데, 확인하는 그 순간에 해당 키가 눌리지 않으면 false를 리턴하기 때문입니다.
checkKeyPressed 함수로 확인하는 S키는 아무리 빠르게 눌렀다가 때어도 항상 모니터에 문자열이 나타나는데, 이는 0.2초사이에 눌린적이 있는지를 확인하기 때문입니다. 하지만 키를 꾹 누르고 있는 경우 모니터에 문자열이 표시되었다가 사라진 후 다시 나타나는 경우가 있는데, 이는 브라우저에서 키가 계속 눌려있는 경우 처음에 시간간격이 자동으로 들어가기 때문입니다.
checkKey 함수로 확인하는 D키의 경우 빠르게 눌렀다가 때어도, 계속 누르고 있어도 항상 일정하게 문자열이 표시되는 것을 볼 수 있습니다.
댓글
이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기