Autor Wątek: Dwarf Dust  (Przeczytany 5153 razy)

Offline Cocomide

  • Użytkownik

# Lipiec 08, 2013, 22:57:21
Używam libgdx OGL 1.0. Będę analizował co gdzie i jak mogłem skopać - dzięki za przetestowanie gierki :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline polkom21

  • Użytkownik
    • BLOG

# Lipiec 09, 2013, 02:04:14
Po najnowszej aktualizacji jest jeszcze gorzej niż było. Wcześniej chociaż trochę grafik się ładowało a teraz do gry żadne się nie ładują. Nie ma co się zaraz za wykluczanie urządzeń brać bo to jest prosta gierka nie ma nic w sobie strasznie skomplikowanego a nie działa jak powinna. Fakt faktem wywala błąd nie raz i zamyka aplikację. Wysyłałem raporty o tym.

Offline Cocomide

  • Użytkownik

# Lipiec 09, 2013, 13:35:36
Wrzuciłem kolejny update. Tym razem we znaki dał się AssetManager, który jakimś cudem zwalniał zasoby przed wywołaniem tego zwalniania...

Offline polkom21

  • Użytkownik
    • BLOG

# Lipiec 09, 2013, 14:07:15
Ja nadal mam te same problemy. Jest jak by minimalnie lepiej ale jeszcze nie wszystkie grafiki działają.

Offline Veldrin

  • Użytkownik

# Lipiec 09, 2013, 16:17:11
Zrobiłeś dużo fajnych rzeczy jezeli chodzi o reklamy/mikropłatności, ale mam wrażenie, że pod względem kodu są jakieś mega błędy grube korzystania z libgdx.

Nie mam przed oczami kodu ale coś złego jest już na starcie. Pojawia się LoadingScreen(tak to nazywam) - rozumiem, że w tle się ładują wszystkie zasoby. Libgdx ma do tego fajne wsparcie. Mimo tego, zanim pojawi się MenuScreen gra muzyka czasem wiele sekund, zanim przejdzie do render() danego stanu.

Bez dostępu do kodu nie potrafię specjalnie pomóc poza wskazówkami. Moim zdaniem architektura kodu jest skopana.

BTW na jakim sprzęcie to testowałeś u siebie?


Problem tkwi w pamięci. Co ty na Boga tyle alokujesz w tej grze?????
« Ostatnia zmiana: Lipiec 09, 2013, 16:20:53 wysłana przez Veldrin »

Offline Cocomide

  • Użytkownik

# Lipiec 09, 2013, 17:26:24
Cytuj
Nie mam przed oczami kodu ale coś złego jest już na starcie. Pojawia się LoadingScreen(tak to nazywam) - rozumiem, że w tle się ładują wszystkie zasoby. Libgdx ma do tego fajne wsparcie. Mimo tego, zanim pojawi się MenuScreen gra muzyka czasem wiele sekund, zanim przejdzie do render() danego stanu.
Libgdx puszcza muzyke na osobnym wątku, czasem zacznie grać zanim wyświetli się Stage gry.

Cytuj
Problem tkwi w pamięci. Co ty na Boga tyle alokujesz w tej grze?????
Problem rzeczywiście tkwi w pamięci, ale pamięci GPU... Assety odchudziłem do granic możliwości i dalej nie wiem czemu na słabszych sprzętach niektóre tekstury są białe...

Cytuj
... mam wrażenie, że pod względem kodu są jakieś mega błędy grube korzystania z libgdx.

Nie mam przed oczami kodu ...

Mocne słowa jak się kodu nie widziało :) Problemem jest raczej dostosowanie gry do słabszych urządzeń. Niestety nie wiem jak zdebugować białe tekstury... Nie posiadam żadnego urządzenia, które by miało taki problem.

Cytuj
BTW na jakim sprzęcie to testowałeś u siebie?

Samsung Galaxy S3 - płynnie, brak błędów
Samsung Galaxy S3 mini - płynnie brak błędów
Samsung Galaxy S2 - płynnie, brak błędów
ZTE Blade II -  oko. 40-50 fps, znikały tekstury ale po zmniejszeniu wielkości atlasów jest bezbłędnie
LG L3 - niskie fps, niegrywalnie ale wszystko się wyświetla (pracuje nad tym telefonem)
Tablet A088 (nie wiem jaka marka) - płynnie, brak błędów
Sony Xperia Sola - płynnie, brak  błędów
Sony Xperia Arc S - płynnie, brak błędów

Offline Karol

  • Użytkownik

# Lipiec 09, 2013, 18:23:13
Sony Xperia X8 - menu płynnie śmiga, a potem loading, loading, minutę później loading i crash. Może i stary sprzęt, ale w bardziej wymagające gry grałem bez problemu (zarówno 2D jak i 3D).

Samsung Galaxy Tab 2 - gra działa (i jest bardzo łatwa i szybko się nudzi), ale ładuje się dłużej niż choćby to: https://play.google.com/store/apps/details?id=com.spidweb.avadon

Offline Cocomide

  • Użytkownik

# Lipiec 09, 2013, 19:14:47
@Karol
A czy mógłbyś wysłać raport z takiego crasha?

Offline Karol

  • Użytkownik

# Lipiec 09, 2013, 21:49:09
@Karol
A czy mógłbyś wysłać raport z takiego crasha?
Jasne, http://pastebin.com/QuApLEWs . Może coś tam dostrzeżesz.

Btw. Twoja gra zjada na tablecie 65MB+ pamięci, aż na żółto świeci. Za to np. Plants vs Zombie nie przebija 56MB, a ma z pewnością więcej assetów. Ciężko mi uwierzyć w to, aby gra mająca 5MB miała problem z rozmiarem assetów.
« Ostatnia zmiana: Lipiec 09, 2013, 21:56:35 wysłana przez Karol »

Offline Veldrin

  • Użytkownik

# Lipiec 09, 2013, 22:31:46
Ja swoje gry tworzyłem z założeniem, że mój telefon - Sony Xperia Neo V to urządzenie, które uznaje za wymagania minimalne. Obsługę OpenGL ES 2.0 również(jak dobrze pamiętam 96% rynku według developer.android?).

Jedna z moich produkcji to low poly 3D z dużą liczbą particli 3D i efektów post-process. U ciebie wszystko da radę zrobić jednym batchowanym drawem bez złożonych particli i efektów post-process.

To oznacza, że gra powinna działać na znacznie gorszym sprzęcie niż mój.
 
Po resecie telefonu - dokładnym killu  procesów w tle gra mi rusza i działa bardzo fajnie, gra się super.  Z tego jednak wnioskuję, że RAM był u mnie problemem.

Problem z VRAM oznaczałby jakiś TOTALNY overkill zasobów(choć gra ma 5 MB).

Cytuj
Libgdx puszcza muzyke na osobnym wątku, czasem zacznie grać zanim wyświetli się Stage gry.

SYNCHRONIZACJA! Akurat zsynchronizowanie tego nie wymaga specjalnej pracy. Raczej poprawnego korzystania z architektury stanów libgdx. Pierwszy raz spotykam się z takim problemem.

W jaki sposób zarządzasz stanami gry oraz zasobami, że pojawia się taki problem?

Cytuj
Mocne słowa jak się kodu nie widziało :)

Bazując na widocznych konsekwencjach - mocno ale prawdziwe(nawet jeżeli częściowo) słowa :D!

Ale no taki problem projektów closed source. Otwarcie źródeł to automatycznie rozwiązanie wielu podobnych problemów!(zachęcam ;))

PS. zawsze jest emulator(sic!), na którym możesz sobie konfigurować rozmiar zasobów wirtualnego urządzenia. Szczerze mówiąc nigdy z powodzeniem nie go nie użyłem ;).

« Ostatnia zmiana: Lipiec 09, 2013, 22:34:03 wysłana przez Veldrin »

Offline Cocomide

  • Użytkownik

# Lipiec 09, 2013, 23:21:07
Wszystko co piszesz ma sens. Analizuje kod linijka po linijce. DDMS odpalony w tle cały czas, nie ma żadnych szalonych alokacji. Nie mam wycieków w aktorach, Assety też ładnie sprzątam przed zmianą stanu.

Muzyka to mało pikuś, po prostu przeniosłem wywołanie w inne miejsce - to wcale nie była oznaka kłopotów :)

Cytuj
W jaki sposób zarządzasz stanami gry oraz zasobami, że pojawia się taki problem?

Do zmiany stanów używam klasy ze splash screenem na której ładnie nie wszystko zwalniam i alokuje nowe assety. Do tego wywołuje disspose starego gameScreena. Assetami zajmuje sie AssetManager z libgdx - ta sprawa jest zrobiona porządnie.

Nie wiem co dalej robić :)

Offline Veldrin

  • Użytkownik

# Lipiec 09, 2013, 23:51:31
Hmm takie teoretycznie rozwiązanie mi przychodzi do głowy. Nie testowałem czy to w praktyce tak się zachowuje, więc nie powiem.

Bo problem jest taki, że brakuje zasobów. Na gorszym sprzęcie rozpoczyna się gra i czegoś brakuje - jest biało.

Architektura twoich zasobów graficznych to atlasy tekstur, pewnie 1-2 dla stanu gry? Może problem na bardzo kiepskich sprzętach(jak wspomniany no name tablet) polega na tym, że odpalasz AssetManagera - który działa asynchronicznie, nie wymagasz finishLoading i rozpoczynasz grę?

Wtedy mamy przykład, że nie cały atlas jest w pamięci, pointer do tekstury jest więc exception nie leci. Na lepszym sprzęcie zwyczajnie się wyrabia  i nie ma wyścigu.

To tylko teoretyzowanie - nie wiem czy takie zachowanie pojawia się w praktyce.


Offline Cocomide

  • Użytkownik

# Lipiec 10, 2013, 01:18:39
Nieźle kombinujesz. Ale obsłużyłem to za pomocą :
if(MyGame.Assets.getProgress() >= 1f) Zresztą - jakby niezaładowany asset został użyty to wywaliłoby stack.

Kiedy miałem ten problem na ZTE to nie zawsze te same tekstury były białe. Czasami platformy, czasami krasnale - różnie. Zrozumiałem, że tekstury muszą się nadpisywać bo są za duże. Zdywersyfikowałem atlasy i zoptymalizowałem pliki png. Zadziałało.

Czy problemem może być liczba atlasów? Przyznam, że mam ich sporo ponieważ grafika jest przystosowana do rozdzielczości HD. Czy jakbym przygotował wariant z mniejszymi zasobami i inne atlasy, dobierający zestawy do urządzenia, to mogłoby to zadziałać?

@Veldrin
Dzięki za pomoc, może dowiem się dzięki tobie o co chodzi

Offline Veldrin

  • Użytkownik

# Lipiec 10, 2013, 01:54:20
Hmm ja w swoich dwóch gierkach na Androida uznałem, że skorzystanie z atlasów nie wpłynie mi specjalnie na wydajność i każda teksturka(nawet animacji krowy) jest osobna :). Wszystkie zasoby potrzebne do gry Cows can't fly są ładowane na starcie raz i tyle.

Jest tego duuużo. Nie miałem problemu.

Napisz ILE tego jest, jakie są ich rozmiary. Może korzystasz z rozdzielczości nie obsługiwanej przez GPU?

PS. A dlaczego nie korzystasz po prostu z wartości zwracanej przez update? Choć pewnie wychodzi na to samo.

Szczególnie jak napisałeś, że jedziesz na OpenGL ES 1.0
« Ostatnia zmiana: Lipiec 10, 2013, 02:00:06 wysłana przez Veldrin »

Offline Cocomide

  • Użytkownik

# Lipiec 10, 2013, 02:53:49
W sumie 38 plików graficznych, około 20 ładowanych do stanu z grą. Wszystko maksymalnie w rozmiarze 1024x1024.

Cytuj
PS. A dlaczego nie korzystasz po prostu z wartości zwracanej przez update? Choć pewnie wychodzi na to samo.
Tak to to samo. Wcześniej używałem progress bara i tak już zostało.