• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C#] WaitForSeconds

0 głosów
34 wizyt
pytanie zadane 5 stycznia w C# przez Patryk Francik Nowicjusz (200 p.)

Witam mam taki kod 

 

kod powinien odczekać 10 sekund  wykonać "if" i powtarzać to do końca pętli while, ale program nie odczekuje 10 sekund i nie mam pojęcia dlaczego. 

public void move (Vector3 i)
    {
        z = i; 
        z.y = transform.position.y;
        
      
        while (Ko == false)
        {


             StartCoroutine(times());
         
            
            if ((i.x == transform.position.x)&&(i.z == transform.position.z))
            {
                Ko = true;
            }
            else
            {

                 if(i.x < transform.position.x)
                 {
                     z.x = transform.position.x - 0.25f;
                 } else if (i.x > transform.position.x)
                 {
                     z.x = transform.position.x + 0.25f;
                 }
                if (i.z < transform.position.z)
                 {
                     z.z = transform.position.z - 0.25f;
                 }
                 else if (i.z > transform.position.z)
                 {
                     z.z = transform.position.z + 0.25f;
                 }
                 gameObject.transform.position = z;

            }
        }
    }

     IEnumerator times()
    {
       

        yield return new WaitForSeconds(10);

    }

 

1 odpowiedź

0 głosów
odpowiedź 5 stycznia przez Alta Nowicjusz (180 p.)

lepiej użyć 

System.Threading.Thread.Sleep(5000);

zamiast wywoływać funkcję StartCoroutine(times());

yield return - wykonuj się natychmiast

patrz: https://docs.microsoft.com/pl-pl/dotnet/csharp/language-reference/keywords/yield

komentarz 5 stycznia przez Patryk Francik Nowicjusz (200 p.)
niby działa, ale kod zatrzymuje cały program a mi chodziło by tylko ten skrypt zatrzymał na chwile, przed włóczeniem następnej linijki kodu.
komentarz 6 stycznia przez Alta Nowicjusz (180 p.)
edycja 7 stycznia przez Alta
można tak zrobić ale wymaga to wielowątkowości.

Opis np. http://www.humantechnology.pl/?p=1.

Można też prościej użyć obiektu BackgroundWorker

https://docs.microsoft.com/pl-pl/dotnet/api/system.componentmodel.backgroundworker?view=net-6.0

 

kolejnym rozwiązaniem jest użycie Timer, który będzie wywoływał kod co np. 5 sek.

https://docs.microsoft.com/pl-pl/dotnet/api/system.windows.forms.timer.tick?view=windowsdesktop-6.0

Podobne pytania

0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 13 lutego 2016 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 84 wizyt
pytanie zadane 12 kwietnia 2021 w C# przez koleś34 Bywalec (2,520 p.)
0 głosów
1 odpowiedź 392 wizyt
pytanie zadane 1 stycznia 2016 w C# przez niezalogowany

87,916 zapytań

136,501 odpowiedzi

304,327 komentarzy

58,290 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...