Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Dyskusja] Dlaczego nie pisze się gier w Javie?


Rekomendowane odpowiedzi

Opublikowano

Dlaczego nie pisze się gier w Javie? Chodzi mi tutaj o większe gry typu Crysis. Mam nadzieję, że rozwinie się z tego jakaś większa dyskusja. :)

2mmtzeu.jpg

Opublikowano

  • Bo jednak wydajność takiej javy jest słabsza.
  • Bo nie da się zabezpieczyć kodu, jave może zdekompilować każdy jeden nastolatek. A zmienić takiego assemblera po kompilacji z np C++ na normalny kod już nie będzie tak łatwo :D
  • Bo w innych językach, może i nie masz możliwości by 1 kod działał magicznie wszędzie tak samo, tylko musisz napisać (oczywiście nie wszystko, sama logika gry nie jest zależna od systemu) pod kilka systemów, to jednak masz możliwość używania zacznie większej ilości możliwości z każdego z tych systemów, java oferuje tylko to co potrafi zrobić na każdym systemie, a nie każdy system ma to samo.

    EDIT: żeby nie było, w javie teoretycznie możesz używać też C++ jako natywów, więc da się dostać do tych dodatkowych funkcji,

  • Bo DirectX jest popularniejszy od OpenGL (co nie znaczy że szybszy)

 

Mnie raczej zastanawia dlaczego to c++ dalej jest tak popularny, nie powiem by jego składnia była wygodna.

To już dawno powinno być zastąpione jakimś nowszym, ciekawszym językiem.

1438614356923701010629.png

 

Opublikowano

Pisze się. Większe też się pisze. Nawet te wielkie.

http://www.runescape.com/community

Dlaczego nie hiperrealistyczne strzelanki? Ze względu na wydajność. Oczywiście można mówić, że różnica wcale wielka nie jest (bo nie jest) i wszystko zależy od tego jak ktoś pisze, a nie od języka. Jednak te małe różnice wychodzą przy takich ilościach obliczeń, a nie wszystko da się przerzucić na gpu. Do tego oczywiście dochodzi łatwość dekompilacji (choć podobnie jest też z c#, a w nim gry się robi).

 

@1361622928-U485574.pngGotoFinal - Bez przesady z tym każdym nastolatkiem. Duży, porządnie zobfuskowany kod może wymagać naprawdę sporo roboty. I nie rozumiem do końca o co chodzi Ci w przedostatnim punkcie. Jakie możliwości? Implementacje jre wykorzystują te 'możliwości' przy wykonywaniu normalnych czynności jak tworzenie gui, itd. A każdy system ma podobny interfejs. Zawsze, w razie czego, istnieją biblioteki z natywami umożliwiające wykonywanie tych charakterystycznych dla systemu czynności.

@Kolejna edycja - Nie zauważyłem, że dopisałeś.

708121422388637873334.png

Opublikowano

Pisze się. Większe też się pisze. Nawet te wielkie.

http://www.runescape.com/community

Dlaczego nie hiperrealistyczne strzelanki? Ze względu na wydajność. Oczywiście można mówić, że różnica wcale wielka nie jest (bo nie jest) i wszystko zależy od tego jak ktoś pisze, a nie od języka. Jednak te małe różnice wychodzą przy takich ilościach obliczeń, a nie wszystko da się przerzucić na gpu. Do tego oczywiście dochodzi łatwość dekompilacji (choć podobnie jest też z c#, a w nim gry się robi).

 

@1361622928-U485574.pngGotoFinal - Bez przesady z tym każdym nastolatkiem. Duży, porządnie zobfuskowany kod może wymagać naprawdę sporo roboty. I nie rozumiem do końca o co chodzi Ci w przedostatnim punkcie. Jakie możliwości? Implementacje jre wykorzystują te 'możliwości' przy wykonywaniu normalnych czynności jak tworzenie gui, itd. A każdy system ma podobny interfejs. Zawsze, w razie czego, istnieją biblioteki z natywami umożliwiające wykonywanie tych charakterystycznych dla systemu czynności.

@Kolejna edycja - Nie zauważyłem, że dopisałeś.

Tja, ale z niektórymi może byc problem, np coś darmowego jak J7Goodies, a mało kto zdecyduje się to kupić jak się jeszcze uczy, a to potem zniechęca.

 

I tak czy siak, taki kod będzie prostrzy do skopiowania, lub zmienienia jakiejś jego częsci.

 

Ale mimo to w Javie nie widuje się tak dużej ilości silników/bibliotek do tworzenia gier jak w przypadku c++.

raczej nie "mimo to" a "przez to"

 

 

I dalej jeden z ważniejszych powodów to DirectX pod którego pisze większość firm. Podobno dlatego że DirectX miał wygodniejsze API, więc nawet jak był wolniejszy to stał się popularny i rynek jest jego...

Ale co aktualnie jest szybsze i ma (statystycznie) lepsze/wygodniejsze/łatwiejsze do nauki API to niezbyt wiem :P

1438614356923701010629.png

 

Opublikowano

Łatwiejsze api dla początkującego ma Opengl z racji tych wszystkich przestarzałych metod (immediate mode, domyślne shadery). Zdecydowanie bardziej rozbudowane jest DirectX, dlatego trudno trochę porównywać ogl do directx, które posiada obsługę dźwięku, wejścia, etc. Najwyżej można to robić z Direct3D.

 

Mnie raczej zastanawia dlaczego to c++ dalej jest tak popularny, nie powiem by jego składnia była wygodna.

To już dawno powinno być zastąpione jakimś nowszym, ciekawszym językiem.

Z tym zdaniem też trudno mi się zgodzić. Standard C++ jest aktualizowany i imo jest aktualny i akceptowalny, jeśli chodzi o wygodę.

708121422388637873334.png

Opublikowano

http://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java

 

Z 2009, ale dalej aktualne.

 

IMO, C++ daje znacznie większe możliwości mikrooptymalizacji (które nie zawsze dają takie mikro efekty) + operator overloading.

Polecam pooglądać wykłady z tegorocznego Cppcon https://www.youtube.com/user/CppCon/videos?flow=grid&view=0&sort=p

odnośnie właśnie dużych produkcji, żeby nabrać pojęcie co właściwie potrafi zrobić różnicę.

Opublikowano

Łatwiejsze api dla początkującego ma Opengl z racji tych wszystkich przestarzałych metod (immediate mode, domyślne shadery). Zdecydowanie bardziej rozbudowane jest DirectX, dlatego trudno trochę porównywać ogl do directx, które posiada obsługę dźwięku, wejścia, etc. Najwyżej można to robić z Direct3D.

 

Z tym zdaniem też trudno mi się zgodzić. Standard C++ jest aktualizowany i imo jest aktualny i akceptowalny, jeśli chodzi o wygodę.

@Sopelek997

 

I jak dla mnie, to właśnie to jest też pewnym problemem, jest ciągle aktualizowany, dodają nowe rzeczy, i powstaje burdel, w którym trudno jest odnaleźć się komuś nowemu.

Chcesz pisać po DirectX, a tu się okazuje że istnieje z 12 sposobów przekazania "Stringa", i każda metoda chce inną.

 

I czemu od razu zakładać że nowy język miałby oznaczać brak mikrooptymalizacji i przeciążania operatorów, problemem jest chyba tylko to w linku od @Sopelek997 czyli "nikomu się nie chce" przepisywać tego co już się ma, na nowy język

1438614356923701010629.png

 

Opublikowano

@1361622928-U485574.pngGotoFinal

 

I czemu od razu zakładać że nowy język miałby oznaczać brak mikrooptymalizacji

 

 

Nie nowy, tylko java. Pytanie nie jest ogólne.

 

 

 

I jak dla mnie, to właśnie to jest też pewnym problemem, jest ciągle aktualizowany, dodają nowe rzeczy, i powstaje burdel, w którym trudno jest odnaleźć się komuś nowemu.

 

Problemem jest też to, że java praktycznie nie jest aktualizowana i zaraz zostanie zjedzona przez C#.

 

powstaje burdel, w którym trudno jest odnaleźć się komuś nowemu.

 

Dlatego takich rzeczy nie piszą nowi tylko ci, którzy potrafią zrozumieć i wykorzystać nowe możliwości języka.
 

 

Chcesz pisać po DirectX, a tu się okazuje że istnieje z 12 sposobów przekazania "Stringa", i każda metoda chce inną.

 

Jakiś przykład? Nie mówię, że nie, po prostu nie się DX i chciałbym zobaczyć jak to rzeczywiście wygląda.

 

I nie wiem jak jest na przykład z SSE w javie, ale na pewno jest to dużo bardziej uciążliwe niż w c++. Ciężko nawet cokolwiek o tym znaleźć.

Opublikowano

Uświadomcie sobie że java jako sam język nie jest jeszcze na tyle sprawny jak pozostałe jest on bardziej ustawiony na przejrzystość i stosunkową łatwość pisania kodu.

Głównym atutem javy jest oczywiście jej JVM bez której dam sobie rękę uciąć daleko by nie zaszli.

 

Uświadomić sobie należy jeszcze jedno java jest napisana w c i posiada takie magiczne coś jak JNI. Dzięki temu magicznemu coś wgl widzimy takie gry jak runescape,
pare lat(parenaście) temu nie było jeszcze tak rozwiniętych bibliotek jak lwjgl,jogl,glfw czy też innych wrapperów do np directx -a i co rs był? był z tym, że musieli napisać własny rasteryzator, ogarnąć wszystkie najbardziej "schowane" techniki rysowania pixeli przez samą javę używać jak najmniejszej precyzji i tak oto osiągneli 50 fps. i ~~150mb ramu

I nagle na rynek wskoczył jogl z swoimi zajebistymi wrapperami do opengl, no to co rasteryzator już mieli teraz wystarczy go odpowiednio zmodyfikować by działał z OpenGL no to po 3 miesiącach ukazała się wersja rs hd na praktycznie tych samych modelach i tym samym silniku z wrapperem OpenGL gra wygladała dziesięć razy lepiej, szybciej chodziła ale używała troszku więcej ramu 200-300.

Teraz rok 2012 doszło pierdylion modeli i innych gówien niszczących gre od środka wynik? Rok 2012 wrappery do dx,opengl na moim starym kompie lirycznie nie można grać użycie ramu oscyluje w graicach 600mb. Mgła w świecie zaczyna się gdzieś na granicach 64metrów (1tile 1 region = 64x64) wię za dużego widoku też nie masz.

Podsumowanie:
Da się? Da ale nie tak pięknie i łatwo.

Warto? Ta, tak czy siak będziesz zobligowany do użycia jakiegos api np ogl a api jest takie samo wszędzie. Nawet jak się nauczysz w javie to będziesz się cieszył że nie trzeba tyle kodu pisać w c/c++.

Więc napisz sobie gre np grzegorz też tam coś kombinuje w opengl w javie no i co no i jakos mu tam idzie coś sie robi, a później  będziesz musiał przemyśleć czy to jestt to czy potrzebujesz coś faktycznie zrobić szybciej czy chcesz może zmniejszyć użycie ramu etc.

 

Ogólnie jeśli chodzi znowu o np tą multiplatformowość w javie to też nie jest takie to piękne i fajne jeśli chodzi o same gry no bo co,

żeby mieć multiplatformową grę w c jedyne co musisz to napisać kilka rzeczy 3 razy (osx,unix,win) a co ciekawsze te wszystkie rzeczy masz już w javie wiec możesz sobie podlookać :C

 

 

Jak ktoś chce to tutaj https://www.dropbox.com/s/jekn2fmc15ufq8b/build.rar?dl=0 macie software renderer-a w javie taki mini bench.

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Opublikowano

I nie wiem jak jest na przykład z SSE w javie, ale na pewno jest to dużo bardziej uciążliwe niż w c++. Ciężko nawet cokolwiek o tym znaleźć.

http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/tip/src/cpu/x86/vm/assembler_x86.cpp

http://developers.opengamma.com/articles/DGEMV.pdf

http://www.cse.scu.edu/~twang1/studentProjects/JIT_java_13s.pdf

http://people.apache.org/~xli/papers/npc10_java_vectorization.pdf

 

eh pełno tego masz.

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Opublikowano

A czy można w jakiś przystępny sposób używać tego z poziomu kodu javy, czy można liczyć jedynie na JIT, że zrobi coś w tym kierunku?

Opublikowano

A czy można w jakiś przystępny sposób używać tego z poziomu kodu javy, czy można liczyć jedynie na JIT, że zrobi coś w tym kierunku?

Po to jit żeby takie rzeczy robił, masz z 3 biblioteki z simd dla javy i z nimi możesz używać, albo samemu napisać.

 

Ludzie po to jest jni zeby z nigeo korzystać. Java to nie tylko 'java'.

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Opublikowano

@Sopelek997

 

A czy można w jakiś przystępny sposób używać tego z poziomu kodu javy, czy można liczyć jedynie na JIT, że zrobi coś w tym kierunku?

Od takich rzeczy jest jvm. To, że nie muszę zawracać se głowy takimi rzeczami, jest dla mnie raczej plusem.

 

Problemem jest też to, że java praktycznie nie jest aktualizowana i zaraz zostanie zjedzona przez C#.

Nie jest? o.O Przeglądając historię wersji C# można wnioskować wręcz odwrotnie. Wcale nie tak dawno wyszło 8 z naprawdę dużą ilością zmian, a już jest early access do 9. Do tego Java jest open source, co jest ponad wszystkim. Aby nie być gołosłownym z tymi akutalizacjami:

http://hg.openjdk.java.net/

 

@PolishCivil pierwszy ;s

708121422388637873334.png

Opublikowano
Nie jest? o.O Przeglądając historię wersji C# można wnioskować wręcz odwrotnie. Wcale nie tak dawno wyszło 8 z naprawdę dużą ilością zmian, a już jest early access do 9.

 

Java jest w tyle za C# z ficzerami.

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

 

Do tego Java jest open source, co jest ponad wszystkim.

 

http://openness.microsoft.com/blog/2014/11/12/open-net-visual-studio/

http://news.microsoft.com/2014/11/12/microsoft-takes-net-open-source-and-cross-platform-adds-new-development-capabilities-with-visual-studio-2015-net-2015-and-visual-studio-online/

 

Żeby nie było. Nie programuję w żadnym z tych języków. Takie jest moje zdanie jako obserwatora tego co się dzieje i z czytania różnych opinii.

Jeśli miałbym wybierać pomiędzy nimi to bez namysłu wziąłbym C#.

Opublikowano

O toroto to. To nie wiedziałem.

No to cóż trza przyznać java bedzie się musiała pastarać .NOT cwaniakuje +D

 

Może będzie historia typu uczeń pobił mistrza =D

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Opublikowano

 

Może będzie historia typu uczeń pobił mistrza =D

C# nie jest multiplatformowe. To raczej wyklucza ten scenariusz. (Tak, jest mono, ale wystarczy spojrzeć na benche java vs mono).

708121422388637873334.png

  • 2 tygodnie później...
Opublikowano

To może i ja się wypowiem:

 

Jak na razie największą przewagą javy nad c# jest dla mnie możliwość zbundlowania javy w instalatorze. Gracz otrzymuje JVM na którym developer pisał i testował. Nie musi mieć nic zainstalowane. W obu wypadkach - java i c#, mamy możliwość podejrzenia kodu, ale od czego są obfuscatory.... jasne, i przez to da się przebrnąć, jednak sam kod gry to nie wszystko (dobrałem się niedawno do kodu szaderów w pewnej fajnej gierce - miodzio).

Java się jakoś tak dziwnie wszystkim kojarzy z opengl - ok, dyskusja nad tym, czy opengl jest lepszy od dx, czy odwrotnie jest fajnym sposobem na zabicie wolnego czasu, nawet jesli tego czasu ma się kilka lat - bo tyle by się ciągnęła. Poczytajcie fora ;)

 

Java jako język wysokiego poziomu ma niewątpliwą przewagę nad c++ - pisze się dużo szybciej. Ktoś powie 'tobie się chyba nigdy gc nie załączył'. Fakt - załącza się rzadko jak się stosuje odpowiednie techniki.

 

Na dzień dzisiejszy gry to głównie 3d - szaderów nie pisze się w javie, język programowania sprowadza się coraz częściej tylko do obsługi logiki/gui gry. Tak przeklinana przez wszystkich za swoją, ponoć marną wydajność java i tak góruje nad językami skryptowymi w które wyposażone są dziś silniki gier.

 

Na koniec - w czym byśmy gry nie napisali, jeśli będzie dostatecznie popularna - i tak ja ktoś rozbierze na części pierwsze, zmoduje, narobi hacków.

 

A żeby nie było, że bronię javy 'ot tak sobie' to zapraszam: https://www.youtube.com/watch?v=UfwS3PQcV0M

Powyższe jest pisane w javie, silnik to JME3, (prawie) autorski szader, opengl. Enjoy hejterzy ;)

pasek_4oo_6o.jpg

Aktualny poziom zła: 75 punktów ostrzeżeń.
Achievements:
  • 22 zajebiste posty oznaczone czerwonym kółeczkiem
  • 1 urażony modek - dwa razy! (Istny Diabeł)
  • 4365 userów forum, którym powiedziałem smutną prawdę
Opublikowano

Zastanów się: kod javy nie jest kodem natywnym procesora (ale runtime environment dla takiego kodu jest już pisany w kodzie natywnym). Więc żeby wykonać np jedną instrukcję javy, komputerek musi wykonać odpowiedni kod maszyny wirtualnej (runtime environment), który to dopiero wykona ta instrukcje javy. Jeśli teraz na javie posadzisz sobie interpreter jakiegoś języka skryptowego, w którym chcesz sobie pisać np logikę gry, to wykonanie jednej instrukcji takiego skryptu będzie obarczone koniecznością wykonania odpowiedniego kodu javy, a to z kolei wymaga wykonania odpowiedniego kodu maszyny wirtualnej. Przecież sam procesor nie wykonuje javy ani twojego skryptu.

Z c# jest analogicznie.

 

Więc, jeśli teraz masz silniczek do gry w którym kodzisz sobie skryptem, to wiedz, że taki skrypt najprawdopodobniej będzie chodził dużo wolniej niż java. Nawet jeśli jego maszyna wirtualna została napisana w języku natywnym procesora, to szczerze wątpię, żeby przegonili pod względem jakości wykonania firmę sun a potem oracle. Te firmy poświęciły lata pracy nad udoskonalaniem javy.

pasek_4oo_6o.jpg

Aktualny poziom zła: 75 punktów ostrzeżeń.
Achievements:
  • 22 zajebiste posty oznaczone czerwonym kółeczkiem
  • 1 urażony modek - dwa razy! (Istny Diabeł)
  • 4365 userów forum, którym powiedziałem smutną prawdę
Opublikowano

Zastanów się: kod javy nie jest kodem natywnym procesora (ale runtime environment dla takiego kodu jest już pisany w kodzie natywnym). Więc żeby wykonać np jedną instrukcję javy, komputerek musi wykonać odpowiedni kod maszyny wirtualnej (runtime environment), który to dopiero wykona ta instrukcje javy. Jeśli teraz na javie posadzisz sobie interpreter jakiegoś języka skryptowego, w którym chcesz sobie pisać np logikę gry, to wykonanie jednej instrukcji takiego skryptu będzie obarczone koniecznością wykonania odpowiedniego kodu javy, a to z kolei wymaga wykonania odpowiedniego kodu maszyny wirtualnej. Przecież sam procesor nie wykonuje javy ani twojego skryptu.

Z c# jest analogicznie.

 

Więc, jeśli teraz masz silniczek do gry w którym kodzisz sobie skryptem, to wiedz, że taki skrypt najprawdopodobniej będzie chodził dużo wolniej niż java. Nawet jeśli jego maszyna wirtualna została napisana w języku natywnym procesora, to szczerze wątpię, żeby przegonili pod względem jakości wykonania firmę sun a potem oracle. Te firmy poświęciły lata pracy nad udoskonalaniem javy.

Błagam nie porównuj skryptowych do javy ;o Co ma piernik do wiatraka.

 

Idąc tropem skryptowania gry w javie, to np na przykładzie słynnego runescape, napisali sobie własny język który nie jest w cale tak trudno napisać i wszystko śmiga.

Ogólnie rzecz biorąc to interpretery typu python, ruby głównie się używa jak piszemy strone serwerową gdzie te pare ms nie robi większej różnicy.

 

"Fakt - załącza się rzadko jak się stosuje odpowiednie techniki." u wut nigga.

o8HfXuR.png

CAPSLOCK TEAM - LEPIEJ WIDOCZNI WIDOCZNIE LEPSI

Cała prawda o LittleBlack

Opublikowano

Błagam nie porównuj skryptowych do javy ;o Co ma piernik do wiatraka.

Powinieneś raczej błagać o to, żeby ludzie nie zadawali takich durnych pytań.

 

Strona serwerowa i brak różnicy na kilku milisekundach? Pomnóż to przez kilka tys. graczy w na prawdę popularnych grach mmo a dostaniesz całe zmarnowane sekundy. Ja nie wiem kto cię uczył programować, ale tam, skąd moja wiedza się wywodzi, największy nacisk na wydajność kładło się właśnie na stronę serwerową.

 

"u wut nigga" wtf? Za stary jestem, pisz 'po ludzku'.

pasek_4oo_6o.jpg

Aktualny poziom zła: 75 punktów ostrzeżeń.
Achievements:
  • 22 zajebiste posty oznaczone czerwonym kółeczkiem
  • 1 urażony modek - dwa razy! (Istny Diabeł)
  • 4365 userów forum, którym powiedziałem smutną prawdę

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...