Notice
Recent Posts
Recent Comments
Link
12-26 00:51
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

킹머핀의 제작 일지

입력 이벤트 직접 만들기 본문

Construct 3

입력 이벤트 직접 만들기

KingMUffin 2021. 2. 10. 20:30

현재 기획하고 있는 게임은 키보드의 특정 키를 눌렀을 때(pressed)와 뗐을 때(released)가 중요합니다. 그리고 Construct 3의 '키보드' 객체는 이 이벤트를 지원해요. 더 필요한 건 없습니다.

그런데, 게임패드키를 누르고 있을 때(held down)만 알 수 있네요? 왜 그럴까요..? 그래서 키보드도 게임패드와 같은 방식으로 입력을 받도록 코딩해보려 합니다. (그냥 각 객체를 따로 코딩하고 나중에 업데이트됐을 때 수정하면 되지만, 또 도전 본능이 도졌습니다. 또 이러면 안 좋은거 알지만.. 고작 입력 받는 코드인 뿐인데.. 뭐.. 허허..)

여담으로, 입력 외의 여러 함수를 미리 정의하다보니 이벤트 개수 제한 50개가 금세 소모되었습니다. 그런 김에 Construct 3 라이센스를 한 달치 결제했는데, 그럼 바로 오늘부터 개발을 시작했다고 봐도 되겠죠? ㅎㅎ


입력이 필요한 모든 객체에 위와 같은 이벤트를 추가하는 것은 번거로우므로, 입력을 받는 이벤트 시트를 따로 만들고, 각 객체에 정의한 이벤트와 같은 역할의 함수를 이 이벤트 시트에서 호출하는 방식으로 구현하기로 했습니다.

또 버그인지 실수인진 모르겠지만, 저 'OR 조건'은 매뉴얼에서 설명하는 대로 우클릭하면 나타나는 메뉴에서 찾아볼 수 없습니다! 그래서 단축키 'Y'를 눌러 설정했어요. 단축키 없이는 제대로 사용할 수 없는 걸까요.. 그래도 단축키 연습하면 훨씬 효율적이니까 오히려 좋아요(긍정)

특정 키를 누르고 있는 중인지만 알 수 있으므로, 눌렀을 때와 뗐을 때를 직접 알아내야 합니다. 그렇다면 변수를 이용해서 바로 이전에도 누르고 있었는지 확인하는 방법 뿐이네요. 아무리 생각해도 이 방법 뿐이에요.

이 방법으로 구현하면 부수적인 효과가 있습니다. 위의 코드처럼 두 개 이상의 기기로 같은 기능의 입력을 이어서 받는 순간 이벤트가 여러 번 실행될 일이 절대 없어요. 다만 처음부터 입력 기기를 하나만 이용할 수 있게 하는 방법도 있지요. 저는 안 그럴 거고요. ㅎㅎ

친구한테 다른 방법이 있을지 물어보니, 애초에 그런 소프트웨어와 운영체제의 모든 이벤트가 거대한 루프 안에서 같은 방식으로 작동한다고 설명해주었습니다. 기억을 살려 아두이노 버튼 동작 코드를 검색해보니 매 프레임마다 호출되는 루프 함수 안에서 입력을 받습니다. 원시적이군요..

이전에 누르고 있지 않다고 확인되면 이벤트와 같은 역할의 함수를 호출합니다. 이미지에는 보이지 않지만, bool 형식의 지역변수를 true로 바꾸어서 키를 떼기 전까지 작동하지 않도록 합니다.

키를 뗐을 때는 각 입력 기기의 조건이 OR이면 안 됩니다. 하나라도 눌렀다면 누른 거지만, 하나도 안 눌려있어야 안 누른 거니까요. 물론 bool 지역변수는 다시 false로 바꿉니다.

이제 함수를 호출하면 제대로 작동하는 것을 알 수 있습니다. &