3 번째 올립니다.
결국 그냥 key down 이나 key press 에서는 해결을 할수 없는것 같은데...
그래도 혹시나 방법이 있을까 해서 마지막으로 올립니다.
일부 워드 프로세서를 보면 키가 눌리고 있는 상태에서 다른 키를 누르면
이 다른키가 적용이 되더군요.
여기서는 어떤키가 눌리고 있어도 다른키가 눌렸다는 것을 감지 한다는 뜻인데
여기서 조금더(?) 발전을 하면 원하는 결과를 얻을것 같습니다.
게임 이라면 움직이는 키가 눌려있고.(이것을 프로그램이 감지하고 있고.)
총알을 발사하는 키를 누른경우.(이것을 감지하는 것은 워드처럼(?)하면)
그리고 총알을 모아서 쏜다면?(이경우는 둘다 눌리고 있는것을 알아야..)
이것을 감지 하려면 역시 api를 알거나
window 메세지를 가로채야 하는 것일까요?
결국 수시로 키보드를 체크하는 루틴이 필요할것 같습니다.
단순히 키보드 버퍼를 읽고 쓰고 하는것이 아니고요.
근데 이런게 가능하긴 한건지요?
아니면 제가 방향을 잘못 잡고 있는 것인지요?
밑에 답변에 보면 key down 등에서 해결된다고 하신분도 있는데..
정말 방법이 있다면 정말 좋겠습니다.
아 그리고..키가 계속 눌리고 있을때.. 리피트 된다고 하나요?
이것에 간격을 조절할수 있는것으로 아는데 어떻게 해야 하는지요?
생각하신데로 루프를 돌면서 계속 검사를 하고 있는것입니다.
저번 '비트 매니아'류의 게임을 델파이로 만들면서 제가 사용했던 방법입니다.
아래에 일부분을 올릴께요.참고하세요.
동시에 몇가지가 눌려있어도 잘 됩니다.
폼의 OnShow이벤트에서...
repeat
UpdateFrame; //그림을 그려주는곳
If GetAsyncKeyState(ord('Z')) < 0 then
begin
If not Key1Down then
begin
Key1Down := True;
여러가지 처리
end else Key1Down := False;
If GetAsyncKeyState(ord('S')) < 0 then
begin
If not Key2Down then
begin
Key2Down := True;
여러가지 처리
end;
end else Key2Down := False;
If GetAsyncKeyState(ord('X')) < 0 then
begin
If not Key3Down then
begin
Key3Down := True;
여러가지 처리
end;
end else Key3Down := False;
If GetAsyncKeyState(ord('D')) < 0 then
begin
If not Key4Down then
begin
Key4Down := True;
여러가지 처리
end;
end else Key4Down := False;
Until (GetAsyncKeyState(VK_ESCAPE) < 0);
박훈철 께서 말씀하시기를...
> 3 번째 올립니다.
>
> 결국 그냥 key down 이나 key press 에서는 해결을 할수 없는것 같은데...
> 그래도 혹시나 방법이 있을까 해서 마지막으로 올립니다.
> 일부 워드 프로세서를 보면 키가 눌리고 있는 상태에서 다른 키를 누르면
> 이 다른키가 적용이 되더군요.
> 여기서는 어떤키가 눌리고 있어도 다른키가 눌렸다는 것을 감지 한다는 뜻인데
> 여기서 조금더(?) 발전을 하면 원하는 결과를 얻을것 같습니다.
>
> 게임 이라면 움직이는 키가 눌려있고.(이것을 프로그램이 감지하고 있고.)
> 총알을 발사하는 키를 누른경우.(이것을 감지하는 것은 워드처럼(?)하면)
> 그리고 총알을 모아서 쏜다면?(이경우는 둘다 눌리고 있는것을 알아야..)
>
> 이것을 감지 하려면 역시 api를 알거나
> window 메세지를 가로채야 하는 것일까요?
>
> 결국 수시로 키보드를 체크하는 루틴이 필요할것 같습니다.
> 단순히 키보드 버퍼를 읽고 쓰고 하는것이 아니고요.
> 근데 이런게 가능하긴 한건지요?
> 아니면 제가 방향을 잘못 잡고 있는 것인지요?
>
> 밑에 답변에 보면 key down 등에서 해결된다고 하신분도 있는데..
> 정말 방법이 있다면 정말 좋겠습니다.
> 아 그리고..키가 계속 눌리고 있을때.. 리피트 된다고 하나요?
> 이것에 간격을 조절할수 있는것으로 아는데 어떻게 해야 하는지요?
>
>
>