자 오늘의 양식은 Console.KeyAvailable 이라는 놈이다
우리가 흔히 게임루프 내에서 키 입력을 받을때 쓰는 놈이 있다
Console.ReadKey() 라는 놈인데
고마운 녀석이면서 동시에 걸리적 거리는 놈이기도 하다
상당히 이중적인 놈이다(?)
우리가 게임루프를 만들때는 보통 아래와 같이 만든다
게임은 멈추면 안되니까 while 안에 true를 넣어주고,
우리가 입력하는 부분인 input
입력한 데이터를 처리하는 부분인 update
업데이트 된 데이터를 바탕으로 그려주는 render
여기서 Console.ReadKey()는 input에 들어가게 된다(아래와 같이)
하지만 문제가 있다
우리가 키를 입력하기 전까지 프레임이 돌지를 않는다...!
예시로 메이플스토리를 생각해보면, 우리는 가만히 있어도 몹들이 알아서 리젠이 되곤 했다
근데 우리가 클릭 한번 안했다고, 시간이 멈춰버리면...?
스페이스바에 동전이라도 끼워넣고 있어야하는가??
그렇기에 저 친구는 고맙지만 걸리적거리는 놈인것이다
저 친구만 없으면 게임루프는 계속 돌아갈텐데 말이다 ㅠㅠ
오늘 우리가 일용할 양식인 Console.KeyAvailable은 저 친구를 잠시 가려줄 수 있는 친구다
예시로 하나 작성해보자
(앞에 더 써놓은게 있긴 하지만) KeyAvailable을 써주지 않는 경우를 먼저 살펴보겠다
위의 코드를 실행하면 아래와 같이 된다..
내가 어떤 키를 입력하기 전까지는 절대로 움직이지 않는다(지금 움직이는 건 내가 키를 눌렀기 때문이다)
즉 프레임이 그려지지 않는 것이다
그림으로 표현하자면 아래와 같다
그렇다면 Console.KeyAvailable이라는 친구를 사용하면 어떻게 될까??
아래의 코드를 실행해보자!
위의 코드를 실행하면 아래와 같이 실행된다
(P 가 가만히 있는걸 보면 나는 키를 누른게 없다)
저 Console.KeyAvailable 이라는 친구 덕분에 ReadKey()를 숨길 수 있던것이다.
if(Console.KeyAvailable)은 쉽게 생각하면
만약 키를 입력받았다면!!
이라고 생가하면 된다
즉 "만약 키를 입력받았다면, 그 키를 읽어라!" 라는 뜻이 되겠다
그림으로 표현하자면 아래와 같다
이로 KeyAvailable 함수를 제대로 익혔으리라 생각한다
오늘의 양식 끝!