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

Gra w C++ i SFML generuje tylko 2FPS

Object Storage Arubacloud
0 głosów
251 wizyt
pytanie zadane 27 lipca 2017 w C i C++ przez Kamix Nowicjusz (150 p.)
otagowane ponownie 27 lipca 2017 przez Kamix

Witam to jest mój pierwszy taki projekt. Podczas próby poruszenia obiektem gracz zauważyłem, że poruszanie nie jest płynne. Po sprawdzeniu wyszło że gra generuje jedynie 2FPS. Na szybko napisałem prymitywne poruszanie, ale ten problem nie zniknął. Przeszukując odmęty internetu spotkałem się z pętlą stało krokową, ale ona nic nie zmieniła. Proszę o pomoc, Parę dni się nad tym głowię i nie mogę rozwiązać problemusmiley. A i wiem, że nie powinno się umieszczać wszystkiego w main-e, ale to ma być prosty projekt.

Główny program

Klasa tworząca gracza

Screen FPS-ów

1
komentarz 27 lipca 2017 przez niezalogowany
Zaraz przejrzę kod bardziej, ale na pierwszy rzut oka mogę powiedzieć, że niepotrzebnie wczytujesz teksturę z pamięci w KAŻDEJ klatce programu. Wystarczy raz przy starcie.

1 odpowiedź

+1 głos
odpowiedź 27 lipca 2017 przez criss Mędrzec (172,590 p.)
wybrane 27 lipca 2017 przez Kamix
 
Najlepsza

Ładujesz teksture przy każdym wywołaniu draw. Nic dziwnego, że masz zaledwie 2FPS. Ładowanie tekstury to bardzo kosztowana operacja. Nie przyszło ci do głowy, że to chyba nie tak ? :P Tekstura powinna być w całym programie załadować raz. Nie pozwól, żebyś miał kilka razy załadowaną jedną teksture, albo jedną teksture ładować wiele razy (i to jeszcze z taką częstotliwością :O). Obecnie przy każdym renderowaniu twojego sprite-a program musi załadować kilkadziesiąt KB danych (bo pewnie tyle ~ waży twoja tekstura) i po chwili je zwolnić (tekstura jest u ciebie obiektem lokalnym).
Obiekt Sprite powinien natomiast być memberem twojej klasy Postac (chociaż to już nie ma aż tak ogromnego znaczenia).

komentarz 27 lipca 2017 przez Kamix Nowicjusz (150 p.)

Dzięki, pewnie dzięki tobie jeszcze nie osiwieję laugh. Wychodzi na to, że szukałem w złym miejscu.

 

Nie przyszło ci do głowy, że to chyba nie tak ?

Trochę się zastanawiałem, że to dziwne i nie praktyczne, ale klase wzorowałem na pewnym przykładzie, tylko nie było tam napisane jak go użyć. A samo programowanie obiektowe dopiero zaczynam i to jest projekt na którym chciałem się uczyć podstawy podstaw. Jeszcze raz wielkie dziękiwink.

komentarz 27 lipca 2017 przez criss Mędrzec (172,590 p.)
Jasne, wszystko z czasem :)

Wszystkie zasoby (tekstury, dźwięki itd.) zorganizuj sobie w taki sposób, żeby był do nich dostęp z każdego miejsca w programie. Np. klasa ze statycznymi metodami opakowująca kontenery na obiekty tekstur. Ew. - drugi sposób - po prostu statyczny member w klasie która będzie z danego zasobu korzystać i np. załadować przy pierwszym wywołaniu konstruktora.
1
komentarz 27 lipca 2017 przez adrian17 Ekspert (344,860 p.)

Taki podstawowy/uproszczony przykład w pseudo-C++, jak to by można zrobić:

Texture& ResourceManager::getTextureById(Id texture_id) {
    if (!texture_cache.has(texture_id))
        texture_cache[texture_id] = /* load texture */;

    return texture_cache[texture_id];
}

class Enemy {
    Enemy() {
        this->texture = textures.getTextureById(blue_enemy_texture_id);
    }
};

 

komentarz 27 lipca 2017 przez criss Mędrzec (172,590 p.)
Dodatkowo polecam trzymać tekstury w mapie z kluczem typu string - bardzo przyjemne w użyciu.

Podobne pytania

0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 15 listopada 2016 w C i C++ przez Pixel040 Gaduła (3,100 p.)
0 głosów
1 odpowiedź 224 wizyt
pytanie zadane 27 sierpnia 2017 w C i C++ przez Artur Koniec Gaduła (3,670 p.)
+1 głos
0 odpowiedzi 555 wizyt
pytanie zadane 5 sierpnia 2016 w Nasze projekty przez obl Maniak (51,280 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

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

...