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

Funkcja Sleep() nie działa prawidłowo

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,443 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez MsMaciek123 Pasjonat (24,760 p.)
edycja 3 kwietnia 2018 przez MsMaciek123

Witam, ja tak na szybko.
Korzystam:
Windows 8.1 , Borland C++ 10.2

Czemu funkcja Sleep() najpierw czeka a potem coś robi, w sensie jak mam kilka Sleepów to czeka sie suma a potem sie wszystko wykonuje.

 

	if (Key==VK_UP)
	{
			Skoczek->Left+=10;
			Skoczek->Top+=10;
			Sleep(1);
			Skoczek->Left+=10;
			Skoczek->Top+=10;
			Sleep(1);
			Skoczek->Left+=10;
			Skoczek->Top+=10;
			Sleep(1);
			Skoczek->Left+=10;
			Skoczek->Top+=10;
			Sleep(1);
	}

Najpierw czeka 4 milisekundy a potem sie wykonuje to co pod nimi.
Da się zrobić tak, żeby była taka animacja?

 

PODKREŚLAM ŻE PROGRAMUJĘ W VCL !

C++ BUILDER 10.2 <<<<<<

​​​​​​

komentarz 3 kwietnia 2018 przez Mariusz08 Maniak (62,280 p.)
Po co te wykrzykniki w tytule?
komentarz 3 kwietnia 2018 przez MsMaciek123 Pasjonat (24,760 p.)
nwm

3 odpowiedzi

0 głosów
odpowiedź 3 kwietnia 2018 przez gagyn Stary wyjadacz (11,050 p.)
Tutaj wydaje się wszystko działać.

Nie wiem jak wygląda reszta tego programu, ale czy np. odswieża się widok co każde dodanie wartości przed funkcją Sleep?
komentarz 3 kwietnia 2018 przez gagyn Stary wyjadacz (11,050 p.)
Zwiększ czas np. Sleep(3000) oraz zrób wyświetlanie czegoś między sleepami.

Zobacz czy będzie co trzy sekundy coś pokazywać, czy pokaże po 12 sekundach.
komentarz 3 kwietnia 2018 przez MsMaciek123 Pasjonat (24,760 p.)
pokazało po 12 sekundach
komentarz 3 kwietnia 2018 przez adrian17 Mentor (354,120 p.)

Nie wiem, jakiej biblioteki używasz i czy nie masz osobnego wątku renderującego

(draghan, jeśli biblioteka do GUI Buildera (btw, 10.2 nie jest Borlandowy AFAIK) jest oparta na natywnym event loopie, a pewnie jest, to blokowanie Sleepem blokuje też wyświetlanie i resztę interakcji. Analogicznie jest w natywnym WinAPI oraz w .NETowym WinForms (jeśli nie użyje się async/await))

komentarz 3 kwietnia 2018 przez MsMaciek123 Pasjonat (24,760 p.)
Faktycznie, Sleep też blokuje wyświetlanie, ale przecież po zakończeniu sleep'a powinien się przesunąć?
komentarz 3 kwietnia 2018 przez adrian17 Mentor (354,120 p.)
Źle to wyjaśniłem. Prawdopodobnie nic się nie stanie, dopóki nie wyjdziesz z funkcji obsługującej zdarzenie. Dopiero wtedy program ma szansę cokolwiek wyświetlić.
0 głosów
odpowiedź 3 kwietnia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Nie wiem jak to działa w C++ Builderze, ale ja widzę, że tylko zmieniasz wartości zmiennych i czekasz pomiędzy poszczególnymi zmianami. Przypuszczam, że wygląda to mniej więcej tak:

zmień wartości koordynatów gracza
czekaj
zmień wartości koordynatów gracza
czekaj
...
narysuj ponownie gracza według jego nowych koordynatów

 

komentarz 3 kwietnia 2018 przez MsMaciek123 Pasjonat (24,760 p.)
tak :0
1
komentarz 3 kwietnia 2018 przez Secrus Nałogowiec (32,880 p.)
no to zmieniasz koordynaty z opoznieniem, a nie ich wyswietlanie.
komentarz 3 kwietnia 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Co tak?
komentarz 3 kwietnia 2018 przez MsMaciek123 Pasjonat (24,760 p.)

Tak to wyglada:

zmień wartości koordynatów gracza
czekaj
zmień wartości koordynatów gracza
czekaj
... 


Przy zmianie wartości koordynatów gracza
 Narysuj go ponownie

 

0 głosów
odpowiedź 3 kwietnia 2018 przez Beginer Pasjonat (22,110 p.)
Zawsze też możesz spróbować napisać własny "sleep". Przykład poniżej:

double time_X = clock();

if (clock() - time_X  > 1)  // jedna milisekunda

{

Skoczek -> Left += 10;

Skoczek -> Top += 10;

Render();  //rysuje nową scenę, czyli widoczna jest animacja

}

Podobne pytania

0 głosów
3 odpowiedzi 464 wizyt
pytanie zadane 22 października 2015 w C i C++ przez aspoka Mądrala (5,290 p.)
0 głosów
1 odpowiedź 522 wizyt
+1 głos
1 odpowiedź 5,289 wizyt
pytanie zadane 28 czerwca 2015 w C i C++ przez Maniti Obywatel (1,220 p.)

93,444 zapytań

142,436 odpowiedzi

322,698 komentarzy

62,806 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...