jMonkeyEngine - opłaca się coś w tym robić?

Witam,

zastanawiam się nad użyciem jMonkeyEngine do mojej gry. Ogólnie to przy wyborze silnika kierowałem się już gotowymi kolizjami, możliwością wczytywania modeli z blendera i możliwością odpalenia gry w przeglądarce.

Czy to dobry wybór? Miał ktoś z tym styczność? I ma ktoś jakieś informacje, czy silnik jest całkowicie darmowy?

Z góry dziękuję.

JAVA?! Panie, nie tędy droga :wink:

Sprawdź Unity.

Unity to podobno jest darmowe, ale nie do zastosowań komercyjnych, czy cuś. Tak mi ktoś kiedyś mówił.

Ale dlaczego nie java?

Racja, do zastosowań komercyjnych płatne. Ale z tego co wiem, można się z nimi dogadać na korzystne warunki, jeśli gra będzie miała np. mało odbiorców.

Dlaczego nie Java, pytasz się? Zastanawiałeś się kiedyś dlaczego taka prosta gra (pod względem graficznym) jak Minecraft ma takie ogromne wymagania sprzętowe (dla procesora 1-rdzeniowego ponad 2GHz i 1,5GB RAMu, jeszcze zależy od sytuacji w grze i rozmiaru mapy, bo może być więcej)?

W C++ taka gra powinna śmigać na Pentiumie III i 512MB RAMu.

Dodatkowo, gry 3D to nie jest target tego języka. Java jest na urządzenia mobilne (te stare) i do środowisk biznesowych (wypierana przez .NET), tam gdzie liczy się spoooora wsteczna kompatybilność.

Java jest największym grzechem Androida.

jMonkeyEngine z tego co pamiętam jest dość dobrym silnikiem. Wydany został na licencji BSD więc można go używać w komercyjnych produkcjach.

Jeśli autor zna Jave to może śmiało pisać gry w tym języku - JVM od dawna jest dobrze zoptymalizowany, do większości gier wystarczy w zupełności.

Zresztą opieranie swojego zdania o Javie na podstawie takich gier jak Minecrafta jest głupotą - wydajność tej gry jest kwestią złej optymalizacji, a nie tego w jakim języku została napisana (tym bardziej, że z OptiFog gra zaczyna działać normalnie). Warto również zauważyć, że nie jeden klon MC napisany w C++ chodzi gorzej niż oryginał…

A czym się różni aż tak bardzo C# od Javy? Ten sam sposób wykonywania, a pisząc w Unity zabijasz możliwość uruchomienia pod np. Linuksem.

“Java jest 20 razy wolniejsza od C++” to archaizm. Aktualnie Java jest może 10-20% wolniejsza od tego samego kodu w C++. Ale jeśli chodzi o większe aplikacje, to zarządzanie pamięcią aplikacji Java jest znacznie szybsze niż te w C++.

Java grzechem Androida? Lepiej pisać w natywnym kodzie męcząc się ręcznym zarządzaniem pamięcią? Kodem napisanym w Javie znacznie łatwiej zarządzać, struktura skompilowanej aplikacji w C++ nie pozwoliła by na podział jednej aplikacji na serwisy, dostawców, aktywności itd. Program w C++ jest NIEOBIEKTOWY po skompilowaniu, jest goły natywny kod, podczas gdy Java po skompilowaniu zachowuje swój podział na klasy i OS umie się dostać do poszczególnych klas osobno.

BTW. to na andka można pisać w C++, od tego jest NDK. Popatrz na porty OpenTTD, Warmux na andka: nie są pisane od zera, tylko po prostu przekompilowane. Podobnie jak projekt Ministro (Qt for Android): pisze się w normalnym C++ z użyciem frameworka Qt.

Czemu Minecraft ma takie wymagania? Oglądałeś kiedyś co ile żre? Najwięcej tam żre grafika (90% czasu), a nie logika. Wbrew pozorom grafika w tej grze jest bardzo wymagająca.

jMonkeyEngine jest dobrym enginem, ma wszystko czego trzeba.

Nie Java jako taka, tylko Dalvik. Od dawna wiadomo, że ta implementacja jest strasznie wolna. Zresztą okazało się ostatnio, że nawet przepisanie tego wszystkiego na Mono prawdopodobniej działało by szybciej, a Oraclovy HotSpot jest (wg. twórcy Mono) jeszcze szybszy.

Java ma tylko tą przewagę, że może być wywoływana w bezpośrednio w przeglądarce. Ale nikła to przewaga, bo dużo lepsze technologie już są dostępne na rynku.

Co do Minecrafta, to pomijając wymagającą Javę, to ta gra według mnie jest do d* zoptymalizowana, a raczej nie jest w ogóle. Dla przykładu renderuje nam się każdy klocek na terenie, który przeszliśmy od momentu wystartowania aplikacji. Po pewnym czasie MC zużywa coraz więcej pamięci, właśnie przez to. I trochę to bez sensu, że mamy renderowaną grafikę dla klocka, który jest 150 innych klocków pod nami, i którego nie mamy prawa widzieć. Oczywiście to wszystko to tylko moja teoria

Widzę, że tu mnóstwo ekspertów, którzy nie maja pojęcia o czym mówią, ale i tak się wypowiadają. Po pierwsze minecraft chodziłby dużo lepiej gdyby został napisany w Jmonkey engine, bo jest on całkim nieźle zoptymalizowany i ma już mnóstwo przydatnych rozwiązań. Ci którzy uważają, że w Javie nie da się zrobić ładne gry nich obejżą ten demo reel z przed 4 lat:

Tu filmik z jme3 alpha

a tu nawet wcześniejszy reel z 2007

gra bang howdy wygląda całkiem ładnie.

A teraz do wszystkich ekspertów, takie silniki są zazwyczaj korzystają wrapperperów (jogl, lwjgl) natywnych bibliotek (OpenGL) i oczywiście taki wrapper powoduje pewne straty w wydajności w stosunku do bezpośredniego korzystania z biblioteki, ale są one pomijalne dużo ważniejsza jest optymalizacja samego kodu silnika/gry niż opóźnienia spowodowane przez wrapper.

Co do oryginalnego pytania, jmonkeyengine to nie jest zły wybór, ale to rozwiązanie dużo bardziej nisko poziomowe niż takie unity. Trzeba poświęcić więcej czasu na naukę. Jeśli myślisz o komercyjnej grze to podstawowa licencja unity dla windows i mac + WEB to zaledwie 400$, jeśli chcesz na czymś zarobić a boisz się zainwestować 400$ to zastanów się czy na pewno warto w ogóle za to się zabierać.