• 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

Object Storage Arubacloud
0 głosów
992 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,300 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 Ekspert (344,860 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 Ekspert (344,860 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 310 wizyt
pytanie zadane 22 października 2015 w C i C++ przez aspoka Mądrala (5,290 p.)
0 głosów
1 odpowiedź 457 wizyt
+1 głos
1 odpowiedź 4,934 wizyt
pytanie zadane 28 czerwca 2015 w C i C++ przez Maniti Obywatel (1,220 p.)

92,555 zapytań

141,402 odpowiedzi

319,545 komentarzy

61,939 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...