2014-02-12 2 views
0

뱀과 비슷한 간단한 C# 게임을 만들고 있는데, 두 가지 측면이 있습니다. 나는 둘 다 움직일 수있는 방법이 있지만, 둘 다 서로 다른 속도로 움직이기를 바란다. 여기 제가 지금 가지고있는 방법의 축소 버전입니다. 문 IF 처음에 여기 다른 기능의 지연이 다릅니다. C#

private async void mover() 
{ 
    while (GlobalVar.Status == "alive") 
    { 
     if (GlobalVar.Direction == "up") 
     { 
       try { moveupp(GlobalVar.Row, GlobalVar.Column, "player"); } 
       catch (System.IndexOutOfRangeException) { died(); } 
     } 
     if (GlobalVar.OppDirection == "up") 
     { 
       try { moveupp(GlobalVar.Row, GlobalVar.Column, "opp1"); } 
       catch (System.IndexOutOfRangeException) { died(); } 
     } 
     await Task.Delay(500); 
    } 
} 

는 내 문자 (플레이어)까지 이동하고, 문 IF 두 번째로, 상대 (opp1)이 움직이고 있습니다. 이들은 지연과 함께 500 밀리 초 지연과 동기화되어 작동하고 있습니다. "TaskDelay (500); 기다림". 제 질문은, 어쨌든 그들은 둘 다 서로 달릴 수 있으며 그 사이에 다른 지연이 있습니까? 따라서 opp1은 ​​플레이어보다 빠르게 움직일 수 있습니까? 미리 감사드립니다.

+3

프로그램 흐름을 제어하기 위해 예외를 사용하지 마십시오. –

답변

1

작업을 지연하는 대신 두 개의 다른 타이머를 사용합니다. 또한 나는 프로그램의 흐름을 제어하기 위해 예외를 사용하지 것이다 :

private PlayerTimer_Tick(object sender, EventArgs e) 
{ 
    if (GlobalVar.Status != "alive") 
     return; // you can also stop timer in this case 

    if (GlobalVar.Direction == "up") 
    { 
     if (GlobalVar.Column == 0) 
      died(); 
     else 
      moveupp(GlobalVar.Row, GlobalVar.Column, "player"); 
    } 
} 

또한 opp1에 대한 타이머를 생성하고이 타이머에 대해 서로 다른 간격을 설정 - 500 플레이어와 opp1에 대한 다른 값.

+0

감사합니다.이 말이 더 합리적입니다. 간단한 질문은 유감이지만이 방법을 호출하려면 어떻게해야합니까? 타이머는 어떻게 사용합니까? –

+0

@LucasHolmes는 응용 프로그램의 종류에 따라 달라집니다 - Winforms 응용 프로그램입니까? –

+0

예, winforms입니다. –

관련 문제