Gra w Javie - czy jest sens?

0

Witam serdecznie.

Jakiś czas temu poznałem język JAVA i mimo iż nie jestem mocno zaawansowanym programistą JAVY, bardzo lubię ten język.

Postanowiłem sobie - w ramach podnoszenia własnych umiejętności - napisać grę, coś w stylu 'HEROES of Might and Magic', z taka różnicą, iż w zamyśle miałaby to być gra sieciowa przeznaczona dla wielu użytkowników. Rozumie, iż muszę mieć serwer na którym będzie aplikacja zarządzająca poszczególnymi graczami, wysyłająca im odpowiednie dla nich dane, serwer bazodanowy z wszelkimi niezbędnymi informacjami i etc.

W związku z tym mam pytanie:

  1. Czy jest sens pisanie takiej gry właśnie w JAVIE? Chodzi mi o porównanie gry napisanej w JAVIE z np. analogiczna grą napisaną w którymś z kompilowanych języków (np. C++).
  2. Jak jest z wymaganiami pamięciowymi dla samej aplikacji gry po stronie użytkownika, a jakie wymagania pamięciowe i mocy obliczeniowej powinien spełniać serwer?
  3. Kwestie połączenia sieciowego aplikacji gry z serwerem. Jaką przepustowość minimalną powinno mieć łącze by gracza mogli swobodnie grać, bez przestojów i etc. ? Oczywiście niezbędny pakiet graficzny dla danego gracza będzie na jego własnym komputerze.

Z góry dzięki za wszelki rady i wskazówki co do dalszego rozwoju :)

Pozdrawiam :)

0

Sam jestem zwolennikiem javy więc pomysł uważam za bardzo dobry :) A patrząc na to trochę bardziej stronniczym okiem:

  1. Jest sens pisania tej gry w Javie. Co prawda będzie ona w jakimś stopniu wolniejsza niż jej odpowiednik w c++ ale do twoich zastosowań (gra herosopodobna) myślę że nie powinno być problemów z wydajnością. W kwestii porównania z c++ na pewno będzie ci łatwiej tworzyć i utrzymywać kod (standard javy obejmuje znacznie więcej technologii niż standard c++, że już o javadocu nie wspomnę)
  2. Wymagania - tu musisz mieć na uwadze, że gra będzie zużywać więcej ramu niż jej odpowiednik w cpp. Po prostu - narzut maszyny wirtualnej
  3. Kwestia wymagań sieciowych tak na prawdę zależy od ciebie - w zależności jak zaimplementujesz protokół klient-serwer. W praktyce robi się chyba tak, że po jego zaprojektowaniu bada się statystyczny ruch w sieci i na tej podstawie określa wymagania

Oczywiście dużo osób będzie gadać "a bo to JVM, wolne itp." ale musisz pamiętać, że nie takie były założenia javy. Jej założeniem było "wore" (write once - run everywhere), szybkie tworzenie kodu i łatwe jego utrzymanie

0

Dzięki :)

No właśnie wirtualna maszyna Java jest trochę wolniejsza ... Chciałbym, żeby ta moja gra pracowała równie szybko jak gry napisane w kompilowanych językach, no ale ja wolę pisać w Javie niż w C ...

Co do statystycznego badania ruchu w sieci, to trzeba będzie przewidzieć sytuację, kiedy ten ruch może bardzo wzrosnąć, więc będę musiał poszukać jakiegoś sprawdzonego rozwiązania. No ale do tego to jeszcze daleka droga ....

Fabułę wstępną już mam, teraz tylko trzeba zaprojektować bazę danych oraz zacząć projektować szkielet aplikacji .

Wszelkie rady co do tworzenia szablonu aplikacji, bazy danych, metod komunikacji, metod użytkownika i etc mile widziane :))

Pozdrawiam :)

0

Postanowiłem sobie - w ramach podnoszenia własnych umiejętności - napisać grę, coś w stylu 'HEROES of Might and Magic', z taka różnicą, iż w zamyśle miałaby to być gra sieciowa przeznaczona dla wielu użytkowników.

kalamita napisał(a)

No właśnie wirtualna maszyna Java jest trochę wolniejsza ... Chciałbym, żeby ta moja gra pracowała równie szybko jak gry napisane w kompilowanych językach, no ale ja wolę pisać w Javie niż w C ...

Java nie jest wolniejsza, jeśli robisz strategię turową.
Przykładem z którego możesz korzystać jest FreeCol. Dokumentacja jest na stronie.

0

@kalamita, obecnie JVM jest jakieś 5% wolniejszy niż kod w C++, jest taka zabawka zaszyta jak JIT Compiler, która zamienia bytecode na kod środowiska systemu operacyjnego. W dodatku jest to robione gdy JVM wykryje, że dany fragment jest często używany. Wydajność może być problemem przy grafice, ale też są już dobre biblioteki (choćby nowe OpenGL), które radzą sobie nieźle.

Co do projektowania to wypisz co ma robić każdy element. Później kazdy punkt rozbij na drobniejsze elementy i znowu opisz. Po kilku podejściach napisanie kodu przy dobrej dokumentacji będzie przyjemnością.

0
  1. Jest sens.
    Jako przykład zwykle jest dawany Jake 2, przepisany Quake 2 na Jave.
    http://bytonic.de/html/jake2.html
  2. Jak gra to pewnie grafika, przy Javie jest problem (przynajmniej był jak ja się w pisanie gier bawiłem), nie znalazłem nic co by obsługiwało DirectX pozostaje tylko openGL.
  3. Szczerze mówiąc nie mam pojęcia. Ale wątpię by jakieś specjalne wymagania, przychylam się do tego co poprzednik napisał.

Jednak jeśli to ma być projekt komercyjny jednak nie eksperymentował bym z Java. Jeśli nie to nawet polecam.

PS.
Ja używałem http://www.jmonkeyengine.com/

0

Drobna uwaga - gra w C++ wcale nie musi być szybka, mały przykład - http://wesnoth.org/ To cholerstwo wygląda nie lepiej niż HoMM 3, na starym Pentium III + 384MB się tnie momentami...

Podsumowując - zdecydowanie bardziej liczy się sensowny algorytm i implementacja niż język.

0

święta prawda Świętowicie :)

0
Koziołek napisał(a)

@kalamita, obecnie JVM jest jakieś 5% wolniejszy niż kod w C++

Nie siej propagandy z webcastów suna...

Ostatnie testy pokazują że JVM od Java 6 jest o połowę wolniejsza od C++. I to w trybie server po czasie przewidzianym na adaptacje JIT'a.

Suma sumarum jest to bardzo dobry wynik dla języka z JIT'em pod sobą. Java jest na pewno dobrym wyborem na serwer bo na pewno łatwiej będzie ci napisać wydajny soft serwerowy w Javie niż C++.

Co do samej gry tego typu to raczej wydajność nie będzie tutaj przeszkadzać. Bardziej zastanów się czy nie chciał byś skorzystać z jakiś frameworków wspomagających robienie gier. Java jest tu uboga w porównaniu do C/C++ lub C#. Tak czy owak pisząc grę w Javie będziesz się dużo odwoływał do bibliotek napisanych w C/C++ żeby mieć jakiś sensowniejszy dostęp do obsługi multimediów i peryferiów.

@Koziołek proszę Cię! tylko nie wyskakuj tutaj z JavaFX...

0

@walec51
Jeszcze Królik wpadnie tutaj ze Scalą i dopiero będzie się działo...

Świętowit napisał(a)

Drobna uwaga - gra w C++ wcale nie musi być szybka, mały przykład - http://wesnoth.org/ To cholerstwo wygląda nie lepiej niż HoMM 3, na starym Pentium III + 384MB się tnie momentami...

Wesnoth może biednie wyglada, ale jego mechanika jest znacznie bardziej złożona i skompilowana od HoMM3. Ponadto jest ciągle rozwijany. Nie mozna od twórców wymagać aby z każdą kolejna wersją cofali się w wymaganiach sprzętowych.

0

Nie jest takie znacznie bardziej skomplikowane znowu. Poza tym na tym samym sprzęcie poważniejsze i bardziej skomplikowane tytuły zdecydowanie lepiej sobie dawały radę. To śmieszne coś ma gigantyczne zapotrzebowanie na moc obliczeniową i pamięć.

0

@walec51, robiliśmy test JNI vs API na spotkaniu WJUGa. Polegał on na otwarciu pliku i wypisaniu jego zawartości. Różnica szybkości była bardzo niewielka. O JavaFX nie będę tu pisał, bo po ostatniej przygodzie jakoś odeszła mi ochota na to rozwiązanie.

Co do BoW weźcie pod uwagę, że jest to projekt GNU i nie można tam wykorzystać niektórych opatentowanych rozwiązań.

0

Dzięki za rady :) !!

Czyli dobrym rozwiązaniem byłoby zastosowanie kombinacji Javy - oprogramowanie serwera oraz C++ (np WindowsAPI + OpenGL) jako aplikacja kliencka ? Lecz jakoś bardziej podoba mi się Java niż C ...

To nie ma być żaden komercyjny projekt, po prostu chcę rozwijać własne umiejętności, a wiadomo że najlepiej uczy się tworząc jakiś projekt ... :)

Co do frameworka, pewnie to i dobry pomysł, ale może by tak zrobić własny ? Na pewno nie tak skomplikowany i oferujący tle metod i funkcji co projekty komercyjne, ale własny, na którym można być się nauczyć ... Macie jakieś doświadczenia z budowaniem własnego frameworka ?

Dzięki za podpowiedzi .... :)

Pozdrawiam :)

0

Raczej na odwrót ja bym kombinował. Klient w Javie, bo każdy to uruchomi. Serwer w C++ + Java jako interfejs dostępowy by mieć wydajne rozwiązanie nawet na wolniejszej maszynie.

Co do frameworku to możesz napisać własne dedykowane rozwiązanie dla gier wykorzystując np. Springa.

0

Hmmm, jak klient w Javie, to i wówczas pokusiłbym się o serwer w Javie ... Nie chciałbym używać żadnych metod rodem z C++ (np. metod macierzystych), wolałbym tylko i wyłącznie metody udostępniane przez klasy Javy, stąd też moje obawy o szybkość działania takiej aplikacji i szybkość połączenia z serwerem ...

0

To śmieszne coś ma gigantyczne zapotrzebowanie na moc obliczeniową i pamięć.

Nie jest takie znowu gigantyczne. Ten gość jest odpowiedzialny za optymalizację, napisz emaila i go zbesztaj. Ale ja się nie dziwię jego strategii, przedwczesna optymalizacja to zło, jeśli działa płynnie przy minimalnych wymaganiach to nie trzeba już w kodzie nic mieszać.

Ponadto, takie niestety są realia tworzenia gier w których nie zdefiniowano warunków zakończenia projektu(gra wciąż jest ulepszana). Bo zwykle zaczynamy optymalizować wtedy, kiedy już wszystko działa jak należy, nawet kosztem czytelności kodu. Ale chyba nie muszę się o tym rozpisywać.

0
Koziołek napisał(a)

Raczej na odwrót ja bym kombinował. Klient w Javie, bo każdy to uruchomi. Serwer w C++ + Java jako interfejs dostępowy by mieć wydajne rozwiązanie nawet na wolniejszej maszynie.

Co do frameworku to możesz napisać własne dedykowane rozwiązanie dla gier wykorzystując np. Springa.

No pewnie. Klient w Javie żeby mieć problemy dostępem do peryferiów, formatów multimedialnych i frameworków to robienia gier. Serwer w C++ żeby walczyć z wyciekami pamięci, segmentation fault i własną integracją narzędziami wspomagającymi skalowalność.

Człowieku weź tymi "radami" ludziom krzywdy nie rób.

Spring ta... bo IoC to w grach jest najbardziej potrzebny...

Koziołek napisał(a)

Klient w Javie, bo każdy to uruchomi

To faktycznie jest tu największym problemem ...

Obczaj sobie to:

http://en.wikipedia.org/wiki/List_of_game_engines

90% frameworków to C++, większość z nich jest przenośna.
Tylko nie idź w WinAPI. Wybierz jakiś framework, który Ci pasuje i korzystaj z tych libów co on. Pewnie będzie jako bazę miał glib, boost albo lib c od apacha.

Chociaż jest wiele plusów z robienia wszystkiego w Javie. Na pewno będzie dla Ciebie łatwiej. Dobra słowa kiedyś słyszałem o bibliotece: http://www.lwjgl.org/
Przykładowe gry, które powstały na tym są nieco amatorskie ale po ich ilości widać że chyba łatwo się w tym tworzy.

Koziołek napisał(a)

@walec51, robiliśmy test JNI vs API na spotkaniu WJUGa. Polegał on na otwarciu pliku i wypisaniu jego zawartości. Różnica szybkości była bardzo niewielka.

Powiedz mi a to się czymś wielce różni ? JVM implementuje w Javie latanie po sektorach dysku ?
Czy tak jak w przypadku JNI przekazuje strumień do API systemu operacyjnego ?
W ogóle to brzmi jak jakiś test na poczet propagandy Javowców. Przecież tutaj wąskim gardłem jest I/O, więc nie macie prawa uzyskać wielce różnych wyników....

Na następnym spotkaniu polecam napisać Petshop'a w Javie i w C++ i ten kod obciążyć. Albo zaimplementujcie sobie małego raytracera.

0

Całkowicie w Javie napisane było MMO Star Wars Galaxies. I ponad milion użytkowników nie narzekał wcale na wydajność.
Co prawda gra upadła, ale nie z powodu zastosowanego języka czy środowiska, lecz poważnych zmian projektowych w trakcie jej największego rozkwitu. Zresztą może i Java częściowo się do tego przyczyniła ponieważ dużo łatwiej było w Javie przeprowadzić tak wielkie zmiany w rozgrywce jakich dokonano z dnia na dzień.

Jeżeli ktoś nie chce używać JVM, to obecnie są kompilatory Javy produkujące kod natywny, co prawda wszystkie (za wyjątkiem chyba jednego) są komercyjne, ale istnieją.
JNI/JNA może się przydać tylko po to aby uzyskać interfejs z systemem, który nie jest zaimplementowany w bibliotekach standardowych. Cały nieprzenośny kod można zamknąć więc w kilku wymiennych "chudych" klasach. W ten sposób cała gra może być w ograniczony sposób przenośna między platformami (gra musiałaby "znać" platformę na której zostanie uruchomiona, co i tak jest oczywiste dla wszelkich projektów C/C++).

Jeżeli chodzi o prędkość skomplikowanych obliczeń, to Java ma realnie przewagę nad C++. Szczególnie w sytuacji wykorzystywania wielu rdzeni procesora i bardzo skomplikowanych obliczeń. Należy jedynie traktować polecenie new jako operację wyjątkową, a nie standardową bo nagminnym błędem pisania w Javie jest rozpasane użycie przydziału pamięci starty na obiekty.
W C/C++ jest to stosunkowo rzadkie. Przydział taki powoduje niepotrzebne wywoływanie kodu, który bardzo opóźnia wszelkie obliczenia, a w sytuacji wywołania systemowego na przydział kolejnych porcji pamięci jest to wydajnościowa katastrofa. Dzieje się tak zazwyczaj w miejscach gdzie potrzeba aby kod działał maksymalnie szybko.
To dlatego testy szybkości aplikacji, o których pisał walec51 wychodzą wolniej o 50% niż dla kodu natywnego. Ale jest to wyłącznie zasługą wielu kiepskich programistów javy, a nie skuteczności skompilowanego kodu. Bo ten potrafi kręcić pętle obliczeniowe pod JiT nie tylko zaledwie o 5% wolniej, lecz wiedząc jak kod źródłowy przekłada się na byte-code, a potem na maszynowy można uzyskać niemierzalne różnice wydajności między C++, a Javą na konkretnej platformie. I to wciąż w czytelnie napisanym kodzie.

Przydzielanie pamięci w Javie ma taką strategię aby jak najmniej pobierać od systemu w wielu wywołaniach. A takie podejście jest dokładnie odwrotne od żądanego dla gier. Można to ominąć przez przydzielenie na początku działania gry kilku ogromnych tablic aby totalMemory zrównać z maxMemory, dzięki czemu całą dostępną dla aplikacji pamięcią będzie zarządzać już tylko manager sterty w javie (odśmiecacz). Kiedy tak już się stanie można te tablice zlikwidować i odśmiecić bo pamięć pobrana nie zostanie już zwrócona, tak samo jak nie będzie już ani jednego żądania pamięci z systemu. Maksymalnie można przydzielić w ten sposób 1,5 GB pamięci - i to jest górne ograniczenie dla jakiejkolwiek gry napisanej w Javie (chyba, że wyjdzie 64-bitowa wersja Javy). Np. W 32-bitowym Windows pozostałą pamięć zajmie sama JVM i inne procesy systemowe.

W ten sam sposób można napisać serwer gry. Zresztą można też pokusić się o system rozproszony oparty o P2P. Pisanie w Javie nie wyklucza żadnych opcji. W Javie łatwiej też napisać moduły odpowiedzialne za ochronę przed piratami. Wystarczy do tego wyłączenie kompilatora JiT, napisanie własnych loaderów klas i trochę sprytu. I taka ochrona może być skuteczniejsza nawet od kodu natywnego ponieważ mało kto potrafi crackować byte-code na poziomie porównywalnym z crackowaniem kodu maszynowego x86/x64.

No na na koniec wcale nie trzeba używać bibliotek standardowych. Cała komunikacja z systemem może być oparta o JNI/JNA. Wtedy trzeba niestety zbudować całą przekładkę do API systemu omijając powolne i obarczone kwestiami kompatybilności biblioteki Javy. Kto choć raz przyjrzał się źródłom tych bibliotek będzie od razu wiedział o co chodzi. Kod w nich zawarty w przeciwieństwie do kodu bibliotek standardowych C/C++ nie jest wzorem do naśladowania, a w wielu miejscach jest modelowym przykładem jak nigdy nie powinno się programować. I tutaj upatrywałbym wielu przyczyn dla których w Javie nie pisze się zwykle wydajnych gier. Co prawda od Javy 5 kod bibliotek polepsza się, ale są to jak na razie tylko wyspy wydajności w morzu starych śmieci.

0
walec51 napisał(a)
Koziołek napisał(a)

@kalamita, obecnie JVM jest jakieś 5% wolniejszy niż kod w C++

Nie siej propagandy z webcastów suna...

Ostatnie testy pokazują że JVM od Java 6 jest o połowę wolniejsza od C++. I to w trybie server po czasie przewidzianym na adaptacje JIT'a.

A może jakiś link? bez tego to sam siejesz propagandę...
Ja widziałem testy i w jedną i w drugą stronę, zależy co i jak testujesz.
Z drugiej strony w praktycznych zastosowaniach kluczowe znaczenie mają biblioteki, które mogą być bardziej lub mniej optymalne.

0
Olamagato napisał(a)

Jeżeli ktoś nie chce używać JVM, to obecnie są kompilatory Javy produkujące kod natywny, co prawda wszystkie (za wyjątkiem chyba jednego) są komercyjne, ale istnieją.

A powiedz mi jak one są właśnie radzą z kompilowaniem Javy wykorzystującej JNI ? (czysto z ciekawości pytam)

Olamagato napisał(a)

Jeżeli chodzi o prędkość skomplikowanych obliczeń, to Java ma realnie przewagę nad C++. Szczególnie w sytuacji wykorzystywania wielu rdzeni procesora i bardzo skomplikowanych obliczeń. Należy jedynie traktować polecenie new jako operację wyjątkową, a nie standardową bo nagminnym błędem pisania w Javie jest rozpasane użycie przydziału pamięci starty na obiekty.

(...)

Ale jest to wyłącznie zasługą wielu kiepskich programistów javy, a nie skuteczności skompilowanego kodu. Bo ten potrafi kręcić pętle obliczeniowe pod JiT nie tylko zaledwie o 5% wolniej, lecz wiedząc jak kod źródłowy przekłada się na byte-code, a potem na maszynowy można uzyskać niemierzalne różnice wydajności między C++, a Javą na konkretnej platformie. I to wciąż w czytelnie napisanym kodzie.

Poproszę o wyniki jakiś testów/benchmarków które na to wskazują. Z kodem użytych aplikacji i konfiguracji.

Jak dla mnie 'mniej new' = 'mniej obiektowy kod', a nie słaby programista

poza tym podałeś co sprawia często że Java jest z wolniejsza w tego typu obliczeniach, a nie podałeś co miało by niby zapewnić jej przewagę.

0

I na nowo wybuchła epicka batalia java vs c++...

Nie rozumiem tego szału @kalamita chcę dla nauki napisać sobie aplikację a Wy się tu 'zabijacie' o kompletnie bez znaczenia w tym układzie kwestie wydajności. Jakby chodziło o aplikacją do planetarnej obrony rakietowej:)

@kalamita Moja rada dla Ciebie, wybierz sobie język w którym najlepiej i najłatwiej Ci się wyraża i w swoim projekcie dobierz technologie, które się na nim opierają itd, bez znaczenia czy to NET, Java czy C++, no i olewaj po drodze przesyconych programistyczną zajebistością maniaków;)

Pokój:)

0

Tiaaaa ...

Nie chodzi co jest lepsze, java czy C++, tylko w czym byłoby wydajniej napisać aplikację gracza w połączeniu z komunikacją sieciową z serwerem przechowującym stan gry, dane graczy i etc.

Chciałbym się dowiedzieć jakie są zalety (i wady też oczywiście) napisania takiej aplikacji w Javie, a jakie w C++, oraz jaki tok postępowania zaproponowalibyście chcąc stworzyć sieciową grę.

Pozdrawiam serdecznie :)

0

I poważnie te ułamki procentów mają dla Ciebie znaczenie w takim układzie?

Powinieneś się najpierw zapytać w czym łatwiej będzie Ci coś takiego napisać, a dopiero potem zastanawiać się nad wydajnością...

0

Wszystko ma znaczenie, te ułamki również ... :)

Mniej więcej wiem w czym chciałbym stworzyć cały projekt, ale chciałbym wysłuchać Waszych opinii, rad i wskazówek co do tworzenia tego projektu i jego powodzenia i sensowności stworzenia właśnie w Javie. Czy może właśnie proponujecie C++ bo .... ma to takie a takie wady, a takie zalety.

Pozdrawiam serdecznie :)

0
walec51 napisał(a)

A powiedz mi jak one są właśnie radzą z kompilowaniem Javy wykorzystującej JNI ? (czysto z ciekawości pytam)

Przyzwoicie, biorąc pod uwagę różnice w strukturze danych, które trzeba skopiować do struktur w Javie lub C/C++. Jednak chyba nic nie będzie szybsze od JNA w tej dziedzinie. Tak czy inaczej najwolniejszymi elementami kodu są wywołania systemowe - czy to w Javie czy C++. Ale to nie wywołania systemowe świadczą o jakości generowanego kodu i o szybkości przetwarzania.

Poproszę o wyniki jakiś testów/benchmarków które na to wskazują. Z kodem użytych aplikacji i konfiguracji.

Zapewne umiesz sobie sam takie testy stworzyć w kilka minut. I to zarówno w obliczeniach stało- jak i zmiennoprzecinkowych.
Łatwo to też spojrzeć w skompilowany kod, a potem przeanalizować go jakimkolwiek deasemblerem. Kod wyprodukowany przez JIT, kompilator natywny Javy i kompilator C/C++ wygląda bardzo podobnie i działa podobnie szybko.
Jeżeli chcesz porównywać wydajność kodu pod kątem gier, to porównuj kod rzeczywistych gier, a nie kod aplikacji użytkowych czy pisanych pod ich kątem benchmarków.

Jak dla mnie 'mniej new' = 'mniej obiektowy kod'

Wybacz, ale od kiedy ilość przydziałów pamięci na stercie ma coś wspólnego z obiektowością?
Można pisać obiektowo (i czytelnie) nie siejąc co chwila zbędnymi operatorami new i nie manipulując ciągle stertą.
Gdyby pisząc program w nieobiektowym C używać malloc w taki stopniu w jakim często używa się w typowych programach w Javie operatora new, to mogłoby się okazać, że wyprodukowany natywny kod jest tak samo wolny jak ten w Javie (a nawet wolniejszy). Polecam sprawdzić samemu, a nie wierzyć na słowo.

poza tym podałeś co sprawia często że Java jest z wolniejsza w tego typu obliczeniach, a nie podałeś co miało by niby zapewnić jej przewagę.

Bo sądziłem, że to oczywiste. Java czytelnie wspiera techniki, które w C++ trzeba symulować - niemiłosiernie zaciemniając przy tym kod, który jest wystarczająco nieczytelny i bez tego.
Co do flamewars C++/Java, to nie będę kontynuował. Przyszłość pokaże który język będzie znikał, a który rozwijał nadal, i do jakich zastosowań. Moim zdaniem przyszłość Javy w grach dopiero się zaczyna, a nie kończy.

ps. @kalamita
Przepisanie kodu z Javy do C++ jest stosunkowo proste. W odwrotna stronę stosunkowo trudne. Wystarczy tylko unikać konstrukcji języka charakterystycznych tylko dla C++ lub tylko dla Javy. Oczywiście wywołania funkcji czy obiektów bibliotecznych są nieprzenośne, więc najlepiej zbierać je tylko w kilku miejscach tak aby jakieś 90% kodu gry jaką stworzysz odwoływało się tylko do stworzonego przez Ciebie kodu i Twoich struktur danych.
Wtedy nawet jeżeli później podejmiesz decyzję o zmianie języka/platformy będzie to znacznie łatwiejsze do zautomatyzowanej konwersji niż pisanie wszystkiego od nowa.

0
Olamagato napisał(a)

Moim zdaniem przyszłość Javy w grach dopiero się zaczyna, a nie kończy.

Też jestem tego zdania. Wystarczy zobaczyć ile gier napisanych właśnie w Javie bądź korzystających z javowskich frameworków powstało w ostatnim czasie. I sądzę że ta dziedzina ma przed sobą świetna prrzyszłość ... :)

0

Marzyciele. Coś więcej niż tetrisy na komórki powstaje? Coś naprawdę poważnego, z mainstreamu? A Java powinna się w ogóle skończyć jako język, są lepsze zamienniki.

0

Dla gry 2d trochę mniejsza wydajność Javy u clienta i tak nie ma chyba wielkiego znaczenia. Jak zapewne wszyscy wiecie, często bywa tak, że gra to jakiś totalnie niezoptymalizowany chłam, mimo to ludzie w to grają...
Jak pisali wyżej, mniej 'new' - w operacjach przeprowadzanych często, gdzie zależy na wydajności.

Robię sobie powoli jakiś mmo.
tu masz mały preview - taka wersja pre alfa demo. Żre trochę cpu, bo w grze jest dużo obiektów od samego początku, a algorytm kolizji - cóż, fizyk ze mnie jak z d**y trąbka jeszcze i po prostu to kiepskawo zrobiłem.
Jeśli chcesz, Kalamita, i nie jesteś zdecydowany że koniecznie chcesz robić klona Heroesów, to bez problemu możesz do mnie dołączyć. Dodam tylko, że do pro mi jeszcze daleko i to się pewnie niemało odbija na jakości mojego kodu. (Choć... jeden z powodów robienia tej gry to właśnie dążenie do poprawy umiejętności)

0

Jeśli grafa będzie 2.5D (rzut izometryczny) to wydajność w jakimkolwiek języku będzie więcej niż wystarczająca. Nawet JavaScript nadaje się do implementacji Quake'a: http://code.google.com/p/quake2-gwt-port/

Warto wspomnieć o 10x wolniejszym liczeniu sinusów w Javie itp z powodu błędów w architekturze x86 polegających na niedokładnej redukcji argumentu, które Java sobie softwareowo obchodzi.

Javowe frameworki do OpenGL'a które wujek Google poleca:
http://download.java.net/media/jogl/www/ (oficjalny)
http://www.lwjgl.org/

Z wydajnością bym nie przesadzał, zwłaszcza że świat kieruje się w stronę OpenCL'a i tym podobnych. Jest też sporo tutoriali nt optymalizacji kodu w Javie (np używanie metod czy klas final itp itd).

0

Przez

kalamita napisał(a)

Tiaaaa ...
to sobie do kolegów odpowiadaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1