c언어, 코드스페이스 사용중입니다.
main함수 구조는 이런식이고요
int main()
{
setlocale(LC_ALL, "");
init();
while (m_bRunning)
{
handleEvents();
render();
}
clean();
return 0;
}
init에서 실행 전 기초 함수를 호출했습니다.
void init()
{
initscr();
keypad(stdscr, TRUE);
noecho();
nodelay(stdscr, TRUE);
curs_set(FALSE);
timeout(50);
}
입력 제어는 handleEvents에서 하는데,
v키 hold하는 동안 swim상태를 유지하고 싶은데,
키보드 반복 입력 제한? 때문에 v키 초기 입력 이후 몇 프레임 동안 v키 입력이 씹히는 현상이 발생합니다.
혹시 해당 문제에 대한 해결 방안을 아시는 분 계실까요?
void handleEvents()
{
int input = getch();
switch (input)
{
case 'q':
m_bRunning = false;
break;
case 'w':
if (Map1[playerY-1][playerX] != 1 && Map1[playerY-1][playerX] != 9)
{
--playerY;
}
pos = -3; // 위 = -3
break;
case 's':
if (Map1[playerY+1][playerX] != 1 && Map1[playerY+1][playerX] != 9)
{
++playerY;
}
pos = 3; // 아래 = 3
break;
case 'a':
if (Map1[playerY][playerX-1] != 1 && Map1[playerY][playerX-1] != 9)
{
--playerX;
}
pos = -1; // 왼 = -1
break;
case 'd':
if (Map1[playerY][playerX+1] != 1 && Map1[playerY][playerX+1] != 9)
{
++playerX;
}
pos = 1; // 오 = 1;
break;
case ' ':
fire();
break;
case 'v':
Swim();
break;
}
}
키보드 입력지연은, 텍스트 에디터 같은걸 만들때 사용하면 적절한 키 입력 지연임. k누르자마자 kkkkkkk가 출력되면 안되잖음. k나오고 잠시 입력안되다가 그담부터 kkkkk.. 날것(raw)의 입력을 받으려면 별도의 라이브러리를 사용해야할걸. windows.h가 된다면, GetAsyncKeyState라는 함수도 있고, DirectX나 다른 환경에서는 글쎄, 찾아보면 나올거임
하필 플레이어 조작 관련 코드라 입력 지연이 발목을 잡네요. 한번 윈도우 라이브러리 함수로 해결해보겠습니다
아 코드스페이스가 리눅스 기반이라 윈도우 api는 활용할 수 없네요..
ncurses 기반으로는 노답임.. gpt가 SDL2로 바꾸래
하필 과제 조건이 codespace환경이라..
어차피 이동하는데 딜레이가 반영될 거라면 그냥 마지막으로 지정된 방향만 기억하고 이동 타이밍이 되었을때 그 방향으로 이동하게 하면 저런 문제가 좀 있어도 부자연스러운걸 좀 줄일 수는 있을거 같은데
사실 swim()중이면 플레이어 랜더도 바꾸어줄 계획이었어서.. swim중에만 예를 들어 @를 출력하고, 아닐 땐 *를 출력하려고 해 문제가 있었어요...
https://github.com/lihexali/linux-kbhit
이리
저리 찾다가 이걸 찾았는데 이해가 안돼서 될지 모르겠네
오 감사합니다! clone후 makefile통해 적용하면 되겠네요.... 진짜 감사합니다...