Reacties
- Is niet ' t minecraft gebouwd met java? Of voornamelijk OpenGL? Oh, en bekijk C # als je niet 100% ingesteld bent op Java, want het is geweldig.
- Waarom niet ' kom je bij de Stack Overflow C ++ Chat ? We houden van C ++, we denken dat het absoluut correct kan worden gebruikt, en we weten hoe we dat moeten doen, en we ' zouden heel graag willen delen.
- Minecraft is java + LWJGL + Notch ' s codeervaardigheden, dus qua prestaties is het VERSCHRIKKELIJK.
- Of je nu codeergames of iets anders bent, jezelf opsluiten in een enkele taal zal je in de toekomst niet helpen. Vertakt een beetje, ofwel C ++ of iets anders zoals Python. Het kost tijd, maar het maakt je een betere ontwikkelaar.
- Je ' krijgt veel verkeerde informatie omdat de Java / C ++ oorlogen helder branden, wees bereid om specifieke voorbeelden te vragen voordat je een mening accepteert en ook om zelf meer te onderzoeken =) Dat gezegd hebbende, ben ik het met @loganfsmyth eens dat je veel talen moet kennen, want alleen dan kun je de juiste tool kiezen voor elke taak . Als je in de nabije toekomst alleen " programmeren van spelstijlen " wilt leren, gebruik dan wat je ' vertrouwd zijn met (Java) en leer later C ++. Heck, misschien doe je later content-pipelines in C # en games in Java ME, moeilijk te voorspellen =)
Answer
Ja, controleer deze lijst voor een bewijs. Dat zijn enkele spellen die met Java zijn gemaakt met behulp van The Lightweight Java Game Library (LWJGL). Het is een low-level framework dat OpenGL biedt voor grafische afbeeldingen van hoge kwaliteit en OpenAL voor geluiden. Het biedt ook invoer-API. Hiermee kun je vrij gemakkelijk aan de slag met serious game-ontwikkeling in Java.
Momenteel ben ik bezig met het schrijven van mijn tweede 3D-game als hobbyproject in Java, en ik vind het gewoon geweldig. Vroeger schreef ik mijn spellen met C ++, maar na het overschakelen naar Java is er geen weg meer terug. Het ondersteunen van meerdere besturingssystemen met Java kan heel eenvoudig zijn, bijvoorbeeld mijn vorige Java-game, die ik een jaar lang in Windows ontwikkelde, werkte meteen onder Linux en in OS X met slechts één bug zonder dat ik iets op die platforms hoefde te compileren.
Aan de andere kant heb je met Java een aantal problemen.
- Vuilnisman. Zoals anderen hebben gezegd, is niet-deterministisch geheugenbeheer een probleem, en u moet dat in gedachten houden.
- Gebrek aan bibliotheken van derden. De meeste beschikbare bibliotheken ondersteunen Java niet. Aan de andere kant heb je altijd de mogelijkheid om deze native bibliotheken ook vanuit Java aan te roepen, maar het is meer werk om dat te doen. Er zijn ook Java-ports of kant-en-klare wrappers beschikbaar voor populaire bibliotheken, ik gebruik bijvoorbeeld JBullet – Java-poort van Bullet Physics Library . Aan de andere kant heeft Java een enorme ingebouwde klassenbibliotheek, waardoor er minder behoefte is aan bibliotheken van derden die niet met games te maken hebben. Het ontbreken van bibliotheken is voor mij geen probleem geweest, maar ik kan me voorstellen dat dit ook voor anderen kan zijn.
- Java wordt niet ondersteund door populaire spelconsoles en het is niet zo ver om gemakkelijk over te schakelen naar die van Java zoals ik weet. Aan de andere kant gebruikt Android, een populair mobiel platform, een vorm van Java. Dit is ook een optie, maar “zorg ervoor dat dezelfde Java-code niet zowel op een pc als een Android-apparaat werkt.
- Kleinere gemeenschap. De meeste gameprogrammeurs gebruiken C ++ en hebben naar mijn ervaring vaak een hekel aan Java. Don” verwacht niet zoveel mogelijk hulp van anderen te krijgen. Verwacht geen baan in game-ontwikkeling zonder C ++ -vaardigheden.
Antwoord
Niet echt. Hier Ten eerste is er in termen van bestaande bibliotheken voor Java weinig in vergelijking met vrijwel alles dat voor C ++ is.
Ten tweede is Java als een taal eenvoudig leent zich niet goed voor game-ontwikkeling – ik bedoel, als je bijvoorbeeld te maken hebt met GPU-buffers, dan biedt Java geen taalfunctie die je helpt ervoor te zorgen dat ze correct worden vergrendeld en ontgrendeld of verwijderd, wat C ++ Bovendien is er het prestatieprobleem – en de GC is niet-deterministisch, wat super slecht is voor een game.
Ik heb nog nooit een niet-indie-game gezien die veel tijd in een taal die niet is gecompileerd naar native code voorafgaand aan uitvoering, en zelfs de indiegames die dat wel doen, zijn een zeldzaamheid.Dus ik ben er op dit moment van overtuigd dat het gewoon niet kan.
Ook als ik Java nu blijf leren en verbeteren, en het blijkt dat later Ik moet C ++ leren, zal het moeilijk zijn om over te schakelen?
Ja, absoluut zal het. Java en C ++ zijn enorm verschillend, ondanks hun oppervlakkige syntactische overeenkomsten. Java-ervaring telt voor vrijwel niets bij het leren van C ++.
Gameplay boven graphics is een haalbare keuze, en je kunt het zien aan het succes van games als Terarria en Minecraft. Maar als u van plan bent om srs-afbeeldingen te maken, dan is het niet haalbaar in Java.
Opmerkingen
- +1 aangezien hij zware graphics, snelle gameplay zonder vertraging.
- Java ' s gebrek aan niet-ondertekende gegevenstypen staat er ook tegen. Ja, je kunt er omheen werken, maar het ' is niet ideaal en u ' zult code gebruiken die niet ' de onderliggende gegevens correct.
- @deadmg Is in het geval van vergrendeld en ontgrendeld , verwijst u naar een DirectX API-functionaliteit? & Kunt u vertel me, wat is ' zo slecht aan het hebben van niet-deterministische GC.
- Niet-deterministische GC kan gelijk staan aan het laten vallen van frames, als je een slechte stop krijgt, world pauze en het blokkeert dingen langer dan nodig is om het frame weer te geven. In de praktijk gebeurt dit niet ' niet echt vaak / ooit als je je geheugen plant use, JVM ' s collectors kunnen worden geconfigureerd voor een lage pauze (ruim binnen veilige limieten voor het laten vallen van frames). Toch is het ' niet leuk om mee om te gaan. Je zult uiteindelijk een aanzienlijk deel van de productiviteit moeten teruggeven die je hebt gewonnen toen je C ++ verliet.
- Om te beginnen zul je ' volledig moeten herschrijven.
Antwoord
Dus ik ben echt serieus over game-ontwikkeling, is Java nog steeds een haalbare keuze? Ik heb meerdere keren geprobeerd C ++ te leren, maar ik hou niet echt van de taal. Ik weet niet echt waarom, maar meestal, wanneer ik probeer te leren, kan ik de onderwerpen nooit vatten.
Als uw reden om voor Java te kiezen is dat u C ++ niet begrijpt, zullen uw Java-programmas niet snel genoeg zijn voor grafische afbeeldingen van hoge kwaliteit. Het gebruik van een taal op een hoger niveau zou moeten zijn omdat het je productiever maakt, niet omdat je de taal op een lager niveau niet begrijpt.
Ik denk niet dat het een heel slecht idee is om een spel te schrijven in Java, vooral als het spel eenvoudig is, maar je zult onmiddellijk prestatieproblemen tegenkomen in Java als je het als een kruk gebruikt.
Dus, kort gezegd, kan Java serieus worden genomen voor serieuze game-ontwikkeling. Dit omvat zware graphics, snelle gameplay zonder vertraging en mogelijk en gemakkelijk overschakelen naar consoles?
-
Zware graphics: mogelijk, maar je gaat hetzelfde doen in Java / LWJGL als in C ++ / GL: bytes schrijven naar GPU-buffers en / of de verouderde weergavelijsten zoals Minecraft doet. Als u het geheugenbeheer niet begrijpt, gaat u dit ook niet correct doen.
-
Snelle gameplay zonder vertraging: geen gemakkelijke taak in welke taal dan ook, en de kans is groter dat je jezelf in de voet schiet zonder erbij na te denken.
-
Nee, Java zal niet beschikbaar zijn op consoles.
Reacties
- Als bijkomstige vraag, wat heeft de weergavelijsten vervangen toen ze verouderd waren?
- @Suds: programmeerbare pijplijn, denk ik.
- ha! heeft het al behandeld. VBOs : gamedev.stackexchange.com/questions/22170/…
- Mobiele platforms kunnen weloverwogen consoles. Ik realiseer me dat hij het waarschijnlijk over de grote drie had, maar Android gebruikt Java en er zijn veel games voor gemaakt.
- @ Amplify91 ja, een paar games zijn in Java geschreven voor Android. Maar de meeste goede games en waarschijnlijk alle grafisch intensieve of multi-platform games zijn geschreven in C ++ met behulp van de Android NDK.
Answer
Een experiment Een ervaren programmeur kent over het algemeen veel programmeertalen – het leren van extra programmeertalen is niet zo moeilijk als je er eenmaal een goed kent. Ik zou echter sterk aanbevelen dat C ++ “niet uw eerste taal zou moeten zijn, en waarschijnlijk ook niet de tweede.
Dat komt omdat C ++ veel van zijn efficiëntie haalt uit het niet uitvoeren van enige significante runtime-foutcontrole. Het benaderen van een element aan het einde van een array in Java zal bijvoorbeeld altijd een uitzondering genereren die de programmeur precies vertelt wat er mis is.In C ++ kan je geluk hebben en het zal onmiddellijk crashen, maar heel vaak zal het stilletjes andere gegevens weggooien en de fout zal pas veel later verschijnen .
Ik zou willen voorstellen dat je voorlopig bij Java blijft (of overschakelt naar C # als je dat liever hebt). Dat zal je dingen sneller laten doen dan met C ++, en prestaties op een pc zouden geen probleem moeten zijn.
Denk erover na om C ++ te leren nadat je een paar projecten in veiligere talen hebt voltooid. C ++ is wat je nodig hebt voor de meeste professionele game-ontwikkelingstaken.
Merk op dat, met uitzondering van C # / XNA om een game die je op een console hebt geschreven, minimaal een bedrijf op te zetten, met een kantoor en hebben een groot budget beschikbaar voor ontwikkelingshardware en andere uitgaven.
Opmerkingen
- Dit is ook uitzonderlijk waar omdat andere talen dan C ++ geeft u een gevoel van voldoening. Het kan honderden uren duren voordat C ++ aanvoelt als niets. Door eerst andere talen te leren, kunt u natte voeten krijgen.
- Uw opmerkingen over het gebrek aan foutafhandeling zijn echt over C (en de zogenaamde C ++ -code die echt C is). C ++ heeft standaardbibliotheken (en standaardsjabloonbibliotheken) die veel betere foutafhandeling hebben dan wat u beschrijft. C ++ heeft ook door de leverancier geleverde bibliotheken (zoals MFC) die fatsoenlijke foutafhandeling.
Antwoord
Disclaimer: Dit geeft geen exact antwoord op uw vraag. Ik heb echter geprobeerd om (kort) enkele punten te noemen die voor u interessant kunnen zijn.
De reden dat u zoveel over C ++ ziet, is omdat C ++ nog steeds de industriestandaard is – de meest voorkomende taal voor consoles, enz.
Java wordt niet vaak gebruikt. Minecraft is een behoorlijk populaire game die het groot heeft gemaakt met Java; maar grafisch is het niet zo geweldig. Spiral Knights is niet slecht – ook gemaakt in Java, met veel graphics.
Als je van Java houdt, lijkt C # qua syntaxis erg op elkaar, met het voordeel dat het interop met C ++ – zodat dingen op laag niveau kunnen worden gedaan in C ++ indien nodig. Unity kan C # gebruiken voor scripting, en XNA is een uitstekende keuze.
Nogmaals, Java wordt niet veel gebruikt. Als je wilt qua stijl en syntaxis denk ik dat je C # een zeer vergelijkbare, zeer prettige codeerervaring zult vinden.
Ik hoop dat je dromen het halen, het is onderweg heel leuk 🙂
Reacties
- Heel veel onnauwkeurigheden in deze berichten. Minecraft " slecht " graphics zijn niet (sterk) gerelateerd aan de taal. MC-slechte prestaties houden rechtstreeks verband met het feit dat Java een slechte taal is voor games vanwege ENORME prestatieproblemen en dat LWJGL om dezelfde reden een ongeschikte bibliotheek is voor grote codeerprojecten Maar de grootste factor was Notch
s slechte codering en implementatie, die wordt opgelost … langzaam. C # biedt u alle voordelen van beheerd geheugen zonder de meeste Java-prestatieproblemen. Het nadeel is dat C # sterk Microsoft-gecentreerd is voor zowel games als applicaties.
- @EfEs: ik haat het om het je te vertellen, maar beheerd geheugen is verschrikkelijk voor games, en mensen die games coderen in XNA, moeten meer tijd besteden aan geheugenbeheer dan mensen die coderen in C ++. De niet-deterministische aard van de GC betekent dat je praktisch alles moet bundelen en toewijzing zoals de pest moet vermijden – niet de manier waarop de taal zou moeten worden gebruikt.
- Dit antwoord was niet bedoeld om 100% nauwkeurig te zijn ; Ik noemde alleen voorbeelden die ik vaag ken. Voel je vrij om DV.
- @DeadMG Ik weet dat C ++ de juiste keuze is, ik probeerde alleen maar uit te leggen dat C # beter is dan Java voor games.
- Het is een lange tijd C # ontwikkelaar (niet de game-ontwikkelaar dacht) Ik geloof dat pooling en geheugenbeheer grote problemen zijn voor elk slecht ontworpen systeem. Mensen met de C / C ++ – mentaliteit en manieren van ontwikkeling die ik ken, snakken nauwelijks naar de beheerde geheugen-, ontwerp- en architectuurpatronen die moeten worden gebruikt en profiteren ervan in een taal als Java / C #. Wat ik probeer te zeggen, is niet dat C / C ++ -technieken of -producten slecht zijn, maar dat zelfs als je eenvoudigere talen gebruikt in termen van syntaxis (zoals Java en C #), je nog steeds veel ervaring nodig hebt om je spel goed te ontwerpen manier.
Antwoord
Kijk kerel, het simpele antwoord op “Is Java levensvatbaar voor game dev “is een duidelijk ja. U kunt elke programmeertaal gebruiken om games te maken. Dat betekent niet “dat u moet moeten .
Waarschijnlijk juist de dingen die u afzetten van C ++ ( geheugenbeheer op laag niveau, geen garbage collector, aandacht moeten besteden aan pointers, structs as arrays etc) zijn precies de dingen die je zou moeten leren als je een computer wilt exploiteren bronnen meest efficiënt .Uw games werken het beste als u de bronnen van de computer zo efficiënt mogelijk gebruikt.
Java doet een aantal dingen (zoals het controleren van de grenzen van de array) waardoor het langzamer werkt. In deze geoptimaliseerde Java Perlin-ruisvoorbeeldcode, merkte de auteur op “(array-toegang is veel langzamer dan toegang voor leden)”. Dit soort dingen is nogal contra-intuïtief vanuit een C ++ -achtergrond. Java, dat zijn zulke dingen.
Ik zeg: stop met het ontwijken van de kogel, leer C ++ en gebruik het.
Antwoord
Dit geeft geen antwoord op uw vraag; de grafische en consoleproblemen lijken iets waar u heel goed rekening mee moet houden. Ook GC heeft invloed op de prestaties. Maar waar ik over schrijf:
Als je grote, complexe OO-programmas schrijft, schrijf je ze 5 keer sneller in Java dan in C ++. Het onderhoud zal ook veel gemakkelijker zijn. Ik schakelde over (weliswaar voor niet-spelsoftware) en mijn productiviteit schoot omhoog. C #, een ander goed alternatief, is moeilijker te leren dan Java omdat er veel meer van is. Als je het weet, kun je nog sneller code schrijven dan in Java; het biedt je veel trucs. Maar ik vind die trucs kan het onderhoud bemoeilijken. En dan is er nog een Java-document, dat helpt bij de Sun-bibliotheken en uw eigen oude code. C # heeft niets vergelijkbaars.
Ik deed een groot harig spel in Java en vond de taal perfect, maar mijn graphics waren elementair en het was geen schietspel waarbij een tiende van een seconde een eeuwigheid was voor de spelers. Ook verwacht ik er later nog veel aan toe te voegen, terwijl ik denk dat de meeste mensen gewoon een gloednieuw spel gaan schrijven.
Antwoord
Je moet het doen in de taal die je het beste kent, totdat je een formele opleiding (Bachelor of Science?) in Computer Science kunt betalen, met de nadruk op game design . Je zou je game mogelijk kunnen gebruiken om een studiebeurs te krijgen, vooral als je kunt zeggen “Ik deed dit zonder enige formele training in Java”
Moderne JVMs, zelfs die van Oracle, heeft vele, vele functies om de zorgen weg te nemen die mensen hier naar voren hebben gebracht. U kunt verschillende garbage collectors gebruiken om een meer deterministisch garbage collector-gedrag te krijgen. Ik heb geen uitgebreide ervaring met de 3D-bibliotheken – alleen een beetje met Java3D – maar niemand lijkt hier over te hebben geklaagd. Escape-analyse maakt nu lock elision mogelijk en veel snellere / verwaarloosbare toewijzing van objecten met een zeer korte levensduur.
Het probleem is, of je nu kiest voor Java of C ++, je zult moeten leren hoe je concurrency correct kunt gebruiken en een goed begrip hebben van geheugenbeheer. Je kunt het tenslotte net zo gemakkelijk verknoeien met malloc
als met new
. Ik weet niet hoe de tools zijn voor C ++, maar de profileringstools voor Java zijn redelijk eenvoudig te gebruiken, gratis en geïntegreerd met de IDE. Je kunt ze gebruiken om prestatieproblemen op te sporen en leren .
Opmerkingen
- Formeel onderwijs in CS is de moeite waard voor daadwerkelijke programmeervaardigheden in elke discipline. Ik zou het weten, ik ' m in mijn derde jaar.
- Absoluut niet eens met DeadMG. Nadat ik was afgestudeerd en cursussen had gekozen die ik leuk vind, heeft CS mijn spelontwikkelingsvermogen van 10% naar 100% gebracht. div id = “6cdc09e59a”>
leer me geen gebruikersinterface, iconografie enz. maar echte, echte codering.