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

Respienie się przeciwników w RPG, zalezne od czasu, problem

Object Storage Arubacloud
0 głosów
249 wizyt
pytanie zadane 11 maja 2019 w C i C++ przez Padoski Użytkownik (990 p.)

Hejka wszystkim, chcę napisać sobie prostą gierkę w SFML. I nasuwa mi się problem, mianowicie w jaki sposób mogę uzależnić respienie się przeciwników od czasu? Przeglądając jakieś tutoriale na youtube natknąłem się na taki sposób:

Gdzieś deklaruje sobie spawnCounter.

	//Enemies
		if (spawnCounter < 20)
			spawnCounter++;
		if (spawnCounter >= 20 && enemies.size() < 30)
		{
			enemy.setPosition(Vector2f(rand() % int (window.getSize().x-enemy.getSize().x)  , rand() % int (window.getSize().y-enemy.getSize().y)));
			enemies.push_back(RectangleShape(enemy));
			spawnCounter = 0;
		}

I jeśli dobrze rozumiem to działa to w ten sposób, że po prostu program musi "przelecieć" 20 razy przez cały napisany kod, żeby spawnCounter się wyzerował. W takim razie w jakiś sposób daje złudne powstanie czasu pomiędzy respieniem się ich. Tylko czy w takim razie to nie zależy od "wydajności" sprzętu jaki będzie posiadał użytkownik ? albo np. jeśli gra w jakimś momencie będzie potrzebowała większej "wydajności sprzętu" to najzwyczajniej ta przelecenie przez wszystkie linie kodu 20 razy zanim się zinkrementuje do 20 będzie trwało dłużej? Czy jest na to inny sposób ? czy ten jest w miarę dobry? 

Jeśli źle to rozumiem, to proszę o wytłumaczenie i inne uwagi. Z góry dziękuje i serdecznie pozdrawiam!!!

2 odpowiedzi

0 głosów
odpowiedź 11 maja 2019 przez Marcin Siniarski Gaduła (4,420 p.)
Dobrze rozumiesz.
Dla komputera mogącego wyciągnąć 5 FPS (5 klatek na sekundę), ponowny spawn przeciwnika zajmie 4 sekundy natomiast dla 20 FPS ( 20 klatek na sekundę ) zajmie 1 sekundę.

Poczytaj sobie o czymś takim jak delta time.
0 głosów
odpowiedź 12 maja 2019 przez Rzepek Bywalec (2,050 p.)

Wszystko zależy od tego jak działa twój silnik gry, ale rozwiązanie ze zwiększaniem licznika co każe powtórzenie jest co najmniej beznadziejne. SFML ma klasę sf::Clock. Po prostu stworz w zmienna float którą ustawisz na przykład na 2.0f  i na początku pętli pobierzesz czas, który upłynął za pomocą funkcji sf::Clock::getElapsedTime().asSeconds (oczywiście najpierw stworzysz obiekt sf::Clock) i odejmiesz od float'a ten czas. Kiedy wartość float'a będzie mniejsza lub równa 0, ustawiasz ją spowrotem na 2.0f i wykonujesz algorytm respienia przeciwników.

//...........
bool inGame = true;
sf::Clock clock;
float timeToSpawn = 2.0f;

while(inGame)
{
timeToSpawn -= clock.getElapsedTime().asSeconds();
if(timeToSpawn<=0.0f)
{
timeToSpawn = 2.0f;
//Tutaj wykonujesz algorytm respienia przeciwnika
}

//Reszta pętli gry
//............
//............
}

 

Podobne pytania

0 głosów
3 odpowiedzi 626 wizyt
pytanie zadane 16 grudnia 2018 w C# przez Lukas Hajduga Użytkownik (830 p.)
0 głosów
1 odpowiedź 147 wizyt
pytanie zadane 6 listopada 2018 w C i C++ przez GóralGienek Nowicjusz (240 p.)
–1 głos
0 odpowiedzi 696 wizyt
pytanie zadane 26 marca 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)

92,568 zapytań

141,422 odpowiedzi

319,642 komentarzy

61,957 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!

...