Wuwus1 Temat założony przez niniejszego użytkownika |
Problem z wydajnością programu w c++ i sfml » 2017-09-13 17:11:04 Ostatnio zacząłem pisać prostą grę i chciałem przetestować jak sobie radzi na różnych komputerach. Przeniosłem aplikację na komputer siostry i klatki posypały się na łeb na szyje, a procesor skoczył z 2% do 35%. Dziś postanowiłem przynieść go do szkoły i tam odpalić. Komputer zachował się tak samo jak mojej siostry tylko, że procesor skoczył z 10% do 100%. Jedyna rzecz, która wpadła mi w oko to ten błąd https://imgur.com/H1PEx24. U mnie wszystko działa, gra utrzymuje stałe 60 klatek, a w procesach zabiera 1% mocy procesora. Myślę, że błąd może być związany z brakiem karty graficznej lub starych sterowników, ale z drugiej strony to trochę dziwne, że gra zjada tak dużo mocy procesora, a wykonuje mniej operacji niż pierwszy mario na nes'a. Inni mają ten sam problem, tylko że oni nie używają ograniczenia klatek, więc komputer generuje tyle klatek ile może i tu zrozumiem to obciążenie, ale ja ograniczam klatki do 60. Zamieszczam link do kodu źródłowego z VisualStudio i CodeBlocks oraz program w wersji release. Przepraszam za słabo poukładany kod ale jeszcze się uczę c++. Ps avast czepiał się trochę mojej gry nie wiem dla czego. (Nie jestem pewien ale chyba trzeba będzie samemu załączyć bibliotekę sfml 2.4.2). http://www.filedropper.com/gra_1 |
|
Kinexity |
» 2017-09-13 20:56:20 Najlepiej sprawdź poziom użycia karty graficznej ( Open Hardware Monitor - przykładowy program do tego celu). Jeżeli przyczyna jest inna, to przytoczę podręcznikowe pytanie: może gra jest za słabo zoptymalizowana? EDIT: Pozwoliłem sobie sprawdzić u siebie - mam kartę NVIDIA GeForce 920M i u mnie pożera ok. 29 - 31 % rdzenia, co jak na grę, w której w zasadzie za wiele się nie da zrobić, jest dość chorą ilością. |
|
Wuwus1 Temat założony przez niniejszego użytkownika |
» 2017-09-14 07:23:37 Sprawdziłem zużycie karty graficznej programem Open Hardware Monitor i zużycie wzrosło o 1%, a procesor nie podskoczył. Jeżeli chodzi o optymalizację to niewiele mogę zrobić, komputer ma bardzo mało rzeczy do obliczania. Główna część pętli składa się z komend, które wywołują animację gracza (4 sprajty razem 454 Bajty), sprawdza czy gracz nie wcisnął strzałek, jeżeli wcisnął to ma się przesunąć, sprawdza kolizje z oknem gry, aby nie wylecieć za pole widzenia i sprawdza czy gracz nie wcisnął klawisza odpowiedzialnego za atak. Reszta to czyszczenie okna i wyświetlanie gracza. |
|
Wuwus1 Temat założony przez niniejszego użytkownika |
» 2017-09-14 07:41:00 Przeniosłem grę na komputer siostry i powyłączałem niektóre funkcje aby sprawdzić, które zjadają najwięcej cpu. Gdy wyłączyłem funkcje tj. poruszanie gracza, animowanie gracza, sprawdzanie ataku itd. to nic nie odjąłem z procesora dalej 36%, ale jak wyłączyłem funkcje do rysowania na ekranie to procesor się uspokoił. Dotychczas aby narysować coś na ekranie tworzyłem w każdym obiekcie(który chce narysować) funkcję Rysuj do, której przekazywałem referencje do okna sfml, a następnie wywoływałem nim funkcję draw(). Ale czemu na moim komputerze nic się nie dzieje, a na wszystkich innych(które testowałem) cpu szaleje i spowalnia grę? Przykład funkcji rysuj: void LEVEL::RenderLevelBackground( sf::RenderWindow & W ) { W.draw( BackGroundSpr ); }
|
|
Wuwus1 Temat założony przez niniejszego użytkownika |
» 2017-09-14 21:26:42 Po długim szukaniu i pisaniu na forach sfml (tak naprawdę to dostałem odpowiedź po 5 min) dowiedziałem się, że powodem tego, że gra się ścina są niezaktualizowane sterowniki karty graficznej. |
|
« 1 » |