의심되는 질문을하기 위해 다시 한 번 미안하지만 인터넷에서이 솔루션을 검색하고 있지만 그럴 수는 없습니다. 저는 Highschool 프로그래밍에서 최종 프로젝트 작업을하고 있습니다. 나는이 작은 부분을 제외하고는 모든 것을 끝냈다. 나는 2 명의 배경 작업자를 만들었고 (각 플레이어마다 하나씩) 나는이 배경 작업자를 키잉하는 이벤트를 가지고있다. 여기에 코드입니다 :keydown 이벤트가 다른 것을 취소 함 C#
if (e.keycode == Keys.D)
{
p1f = true;
bgwPlayerOne.RunWorkerAsync();
}
if (e.keycode == Left)
{
p2f = true;
bgwPlayerTwo.RunWorkerAsync();
}
좋아, 나는 그것이 어떤 인터넷이없는 내 다른 컴퓨터에 있지만이를 keyDown 이벤트의 코드이기 때문에 그를 입력했다. 변수는 백그라운드 작업자가 if 문을 수행 할 것을 지시합니다. 그러나 주요 문제는 D와 왼쪽 화살표 키를 동시에 누를 때마다 다른 클릭 전에 진행되는 것이 중지되고 가장 최근의 키 이벤트가 시작된다는 것입니다. 이전에 타이머를 사용할 때이 문제가 없었습니다 (지연 문제가있어서 멀티 스레드로 전환했습니다). 이것에 대한 질문이 있으면, 어떤 도움을 주시면 감사하겠습니다. 감사합니다!
업데이트 *****
private void frmTankBattle_MapOne_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D)
{
p1f = true;
bgwPlayerOne.RunWorkerAsync();
}
//System.Threading.Thread.Sleep(1);
if (e.KeyCode == Keys.A)
{
p1b = true;
bgwPlayerOne.RunWorkerAsync();
}
//System.Threading.Thread.Sleep(1);
if (e.KeyCode == Keys.Left)
{
p2f = true;
bgwPlayerTwo.RunWorkerAsync();
}
//System.Threading.Thread.Sleep(1);
if (e.KeyCode == Keys.Right)
{
p2b = true;
bgwPlayerTwo.RunWorkerAsync();
}
if (e.KeyCode == Keys.Space)
{
p1c = true;
tmrPlayerOneCombat.Start();
}
// System.Threading.Thread.Sleep(1);
}
private void frmTankBattle_MapOne_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.D)
{
p1f = false;
p1b = false;
bgwPlayerOne.CancelAsync();
}
if (e.KeyCode == Keys.A)
{
p1f = false;
p1b = false;
bgwPlayerOne.CancelAsync();
}
if (e.KeyCode == Keys.Left)
{
p2f = false;
p2b = false;
bgwPlayerTwo.CancelAsync();
}
if (e.KeyCode == Keys.Right)
{
p2f = false;
p2b = false;
bgwPlayerTwo.CancelAsync();
}
}
우리가 어떻게 키 누르기를 처리하고 winform, WPF 또는 콘솔 – Steve
Keydown 및 KeyUp 이벤트를 사용했는지 표시하려면 Key Press 이벤트가 더 잘 작동합니까? – user8980526
이 작업을 수행하기 위해이 작업을위한 키를 눌러야합니다. – user8980526