[C++] za szybka prędkość gry

0

siemka :).
Robię gierke używając bibliotekę SDL. No i mam taki problem, że przystosowałem prędkość postaci do mojego komputera, który jest już dość stary ;p. Wiem, że bodajże problem leży w tym, że teraz są nowe procesory i większej ilości rdzeni, natomiast mój ma tylko 1. Gdy jednak odpali się grę na nowszym komputerze, gra chodzi o wiele szybciej, nawet czasami tak, ze nie da się grać.
Jak zrobić, aby gra działała jednakowo na obojętnie jakim komputerze?
Dodam, że gra nie jest jakaś skomplikowana żeby niby u mnie sie zacinała xD.

próbowałem opóźnic wywołanie SDL_Flip(); poprzez _sleep(x) ale wtedy spowalnia także na starszym kompie.

Z góry dzięki :).

0

Poczytaj o timer'ach.

0

moze inaczej co w twojej grze sie porusza
bo widze ze nie pomyslales o tym ze jak cos sie porusza to sie porusza ale w CZASIE czyli

				void __fastcall TVehicle::ProcessFrame()
			{
		

	                             int p = GetTickCount();//pobierz czas
							   direction.x = cos(glop*imopi);
							   direction.y = 0.0f;
							   direction.z = sin(glop*imopi);
							   direction = Normalize(direction);
float x =  abs(float(p-t))/1000.0f; // to jest ta magivczna linijka


		pos = vectors_add(pos,vector_multiple(direction,V	* x ) );
            t = p;  lastV = ymo;
}

vehicle przy tworzeniu t musi miec jakas sensowan wartosc najlepiej jest podac aktualny czas

0

no przyznam ze nie pomyslalem o tym ;p.
Ale to znaczy ze musze teraz dodac cos w tym stylu dodac do kazdego obiektu ktory sie animuje/porusza ? Czy moge to dodac w glownej petli gdzie jest SDL_Flip ?.

0

Zrób po prostu pętlę czasu rzeczywistego, i nie będzie miał tu wtedy do gadania nic zaden wielordzeniowiec itp.
poza tym i tak gra jest pewnie jednowątkowa.
przykładowo renderujesz 25 klatek na sekunde. więc na obrot pętli potrzebujesz 40 ms.
mierzysz czas obrotu pętli i usypiasz watek na 40-czas obrotu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1