IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Libgdx a PPM

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Lukáš
Člen
Avatar
Lukáš :29.8.2017 11:42

Dobrý deň,
rád by som sa spýtal na problém ktorý mi robí už dlhodobo problém pri vývoji v libgdx. Libgdx taktiež ponúka prídavný framework Box2D, ktorý slúži na vytváranie sveta,jeho objektov, kolízie medzi nimi, hernej fyziky a tak podobne. Využívajú sa tu jednotky ako metre,kilogramy a podobne. (nechápem toto ich rozhodnutie :D ) To však robí značne problémy a všetky tieto hodnoty, takže napríklad veľkosť (size) textúr, veľkosť obrazovky, pozície textúr (objektov) , všetko musí byť podelené hodnotou PPM (PixelPeerMeter). Tu mi ale nastáva problém, je ich niekoľko, ale práve teraz ma zaujíma hlavne problém s následným poziciovaním. Ak chcem mať niečo napríklad vzdialené 5px od rohu obrazovky, takž napríklad paddingLeft(5), potrebujem to vydeliť taktiež hodnotou PPM, keďže šírka obrazovky je napr 1300/PPM. PPM som stanovil napríklad na PPM =10; . Náš paddingLeft bude teda paddingLeft(5/PPM). Určite vám je jasné že sa mi týmto akoby pokazila mierka. Nemôžem poziciovať pre každý pixel zvlášť ale zrazu je moja minimálna hodnota celých 10 pixelov, čo robí strašnú šarapatu. Pôvodne som hodnotu PPM ani nepoužíval, no neskôr som chcel napríklad aby postava vystrelila šíp a potreboval som aby šíp letel rýchlo. Avšak bez podelenia PPM aspoň 10, by mi Box2D nedovolil aby šíp letel rýchlo, aj keby som nastavil hodnotu applyLinearImpulse na (9999999). Je tam proste nejaké obmedzenie. Na internete som videl dokonca PPM= 100, moja otázka je, čo som urobil zle alebo čo je nutné dodržať , aby som mohol podeliť PPM hodnotou a nemal takéto problémy s poziciovaním?

Editováno 29.8.2017 11:43
 
Odpovědět
29.8.2017 11:42
Avatar
B42P6
Člen
Avatar
Odpovídá na Lukáš
B42P6:30.8.2017 0:27

Ahoj, sám používam libGDX a Box2D a najvýhodnejšie je pre mňa používať kamery a viewporty. Potom už nemusíš všetko deliť PPM. Pomocou kamery si môžeš vytvoriť vlastné jednotky (napríklad podelíš veľkosť obrazovky hodnotou PPM a vykresľuješ rovno v metroch, neriešiš pixle). Cez Viewport potom nastavíš kde sa má to, čo kamera vidí, vykresliť.

Trocha nechápem, prečo chceš niečo presne 5 pixlov od rohu obrazovky, pracovať v rovno v pixloch nie je dobré, potom bude hra vyzerať na každej obrazovke inak. Ja si len nastavím kameru a potom sa všetko nastaví samo tak, že to vyzerá na každej obrazovke (takmer) rovnako.

https://github.com/…aphic-camera

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.8.2017 0:27
'long long long' is too long for GCC
Avatar
Lukáš
Člen
Avatar
Odpovídá na B42P6
Lukáš :30.8.2017 16:21

Ďakujem za odpoveď, určite skúsim tvoj spôsob. Ppm je strašne nepraktické a vlastne jediná vec, pre ktorú ľutujem že som nešiel do C# a unity. Keď prídem z práce skúsim to nejako za pomoci kamier atď podľa toho example. Čo sa týka tých presne 5px, mám to spravené tak že obrazovka je vždy napr 700x460. Tých 5 pixelov sa ti ukáže inak na mobile a inak na veľkom monitore a layout sa zachová presne ten istý, takže mi to funguje dynamicky. Ja mam všetky hodnoty či veľkosti, či pozície, či kameru poziciu, či veľkosť obrazovky podelene ppm a robi to neplechu ked niektora implementacia napr textToolTip ,nemá metódy na zmenu veľkosti a podobne. Dúfam že tvoja rada pomôže.

 
Nahoru Odpovědět
30.8.2017 16:21
Avatar
Lukáš
Člen
Avatar
Lukáš :31.8.2017 14:20

Zdravím,
nejako mi to nepomohlo, nemal by si čas sa pozrieť na ten projekt napríklad pomocou teamViewera? Vôbec netuším ako to zmeniť aby to fungovalo. Však ked zmenším napríklad obrazovku tak musím zmenšiť aj napríklad sprites, lebo ked mám sprite 50x50 a obrazovku 1200x900 a obrazovku zmenším /10 na 120x90 a dám vykresliť sprite 50x50 tak bude zaberať polku obrazovky skoro. Takže ja delím nielen veľkosť obrazovky ale aj všetky size spritov a všetkého okolo, taktiež aj tie pozície. A keď dám kameru zoom tak stále je to len kamera zoom nezmení mi to že nemusím upraviť na menšie tie sprites... proste nechápem :D :D Tak ak by si si našiel čas bol by som vďačný :)

 
Nahoru Odpovědět
31.8.2017 14:20
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.