Kommentarer
- Er ikke ' t minecraft bygget med java? Eller hovedsakelig OpenGL? Åh og sjekk C # hvis du ikke er 100% innstilt på java, da det er kjempebra.
- Hvorfor ikke ' t du kommer til Stack Overflow C ++ Chat ? Vi elsker C ++, vi tror det absolutt kan brukes riktig, og vi vet hvordan vi gjør det, og vi ' ville være helt glade for å dele.
- Minecraft er java + LWJGL + Notch ' s kodingsferdigheter, så ytelsesmessig er det FORFERDELIG. språk vil ikke hjelpe deg i fremtiden. Forgren deg litt, enten C ++ eller noe annet som Python. Det tar tid, men det gjør deg til en bedre utvikling.
- Du ' kommer til å få mye feilinformasjon fordi Java / C ++ krigene brenner sterkt, vær forberedt på å be om spesifikke eksempler før du godtar en mening og også å undersøke mer på egenhånd =) Når det er sagt, er jeg enig med @loganfsmyth at du trenger å kunne mange språk, for bare da kan du velge riktig verktøy for enhver oppgave . Hvis du bare vil lære " spillstilprogrammering " i umiddelbar fremtid, bruk deretter det du ' er komfortabel med (Java) og lær deretter C ++ senere. Heck, senere kan du gjøre innholdsrørledninger i C # og spill i Java ME, vanskelig å forutsi =)
Svar
Ja, det er, sjekk denne listen for bevis. Dette er noen spill laget med Java ved hjelp av The Lightweight Java Game Library (LWJGL). Det er et rammeverk på lavt nivå, som gir OpenGL for grafikk av høy kvalitet og OpenAL for lyder. Det gir også input API. Med disse kan du ganske enkelt komme i gang med seriøs spillutvikling i Java.
Jeg skriver for tiden det andre 3D-spillet mitt som et hobbyprosjekt i Java, og jeg elsker det bare. Tidligere skrev jeg spillene mine med C ++, men etter å ha byttet til Java er det ingen vei tilbake. Det kan være veldig enkelt å støtte flere operativsystemer med Java, for eksempel mitt forrige Java-spill, som jeg utviklet i Windows i ett år, jobbet i Linux med en gang og i OS X med bare en feil uten å måtte kompilere noe på disse plattformene.
På Java har du derimot noen problemer.
- Søppeloppsamler. Som andre har uttalt er ikke-deterministisk minneadministrasjon et problem, og du må kode det i tankene.
- Mangel på tredjepartsbiblioteker. De fleste tilgjengelige biblioteker støtter ikke Java. På den annen side har du alltid muligheten til å ringe disse innfødte bibliotekene også fra Java, men det er mer arbeid å gjøre det. Det er også Java-porter eller ferdige innpakninger tilgjengelig for populære biblioteker, for eksempel bruker jeg JBullet – Java-port av Bullet Physics Library . På den annen side har Java et enormt klassebibliotek innebygd, noe som reduserer behovet for tredjepartsbiblioteker som ikke er spillrelaterte. Mangelen på biblioteker har ikke vært et problem for meg, men jeg kan forestille meg at det kan være for andre.
- Java støttes ikke av populære spillkonsoller, og det er ingen enkel bytte til de fra Java så langt som jeg vet. På den annen side bruker Android, som er en populær mobilplattform, en eller annen form for Java. Dette er også et alternativ, men ikke bortsett fra den samme Java-koden for å fungere både på en PC og Android-enhet.
- Mindre fellesskap. De fleste spillprogrammerere bruker C ++ og misliker ofte min Java. Don » t forventer å få så mye hjelp fra andre. Ikke forvent å få jobb i spillutvikling uten C ++ ferdigheter.
Svar
Ikke egentlig. Her «s tingen – for det første er det veldig lite når det gjelder eksisterende biblioteker for Java sammenlignet med praktisk talt alt som er for C ++.
For det andre, Java som et språk ganske enkelt egner seg ikke godt til spillutvikling – jeg mener for eksempel hvis du har å gjøre med GPU-buffere, så gir Java ikke en språkfunksjon som vil hjelpe deg med å sikre at de er riktig låst og ulåst eller avhendet, hvilket C ++ gjør. I tillegg er det ytelsesproblemet – og GC er ikke-deterministisk, noe som er super-dårlig for et spill.
Jeg har aldri observert noe ikke-indiespill som tilbrakte betydelig tid i et språk som ikke ble kompilert til innfødt kode før utførelse, og til og med indiespillene som gjør det er en sjeldenhet.Så min tro akkurat nå er at det rett og slett ikke kan gjøres.
Også hvis jeg fortsetter å lære og forbedre Java nå, og det viser seg at senere Det kreves at jeg lærer C ++, vil det være vanskelig å gjøre bryteren?
Ja, absolutt vil det. Java og C ++ er veldig forskjellige, til tross for deres overfladiske syntaktiske likheter. Java-opplevelse teller nesten ingenting når du lærer C ++.
Spill over grafikk er et levedyktig valg, og du kan se det i suksessen til spill som Terarria og Minecraft. Men hvis du har tenkt å lage srs-grafikk, vil det ikke være mulig i Java.
Kommentarer
- +1 siden han spesifiserte tung grafikk, raskt spill uten forsinkelse.
- Java ' mangel på usignerte datatyper står også imot det. Ja, du kan omgå det, men det ' er ikke ideelt, og du ' bruker kode som ikke ' ikke gjenspeiler underliggende data riktig.
- @deadmg Er tilfelle av låst og ulåst , refererer du til noen DirectX api-funksjonalitet? & Kan du fortell meg, hva ' er så ille med å ha ikke-deterministisk GC.
- Ikke-deterministisk GC kan tilsvare å slippe rammer, hvis du får dårlig stopp verden pause, og det låser ting lenger enn det tar å gjengi rammen. I praksis skjer dette ikke ' t ofte hvis du planlegger minnet ditt bruk, JVM ' s samlere kan konfigureres for lav pause (godt innenfor trygge grenser for rammedråpe). Likevel er det ' ikke en morsom ting å måtte forholde seg til. Du ender opp med å måtte levere tilbake betydelige mengder av produktiviteten du oppnådde da du forlot C ++.
- En start du ' må skrive helt om.
Svar
Så jeg er virkelig seriøs med spillutvikling, er Java fortsatt et levedyktig valg? Jeg har prøvd flere ganger å lære C ++, men jeg liker ikke språket. Jeg vet ikke helt hvorfor, men vanligvis når jeg prøver å lære, kan jeg aldri forstå temaene.
Hvis grunnen til at du valgte Java er at du ikke kunne forstå C ++, vil ikke Java-programmene dine være raske nok til grafikk av høy kvalitet. Å bruke et høyere nivå språk bør være fordi det gjør deg mer produktiv, ikke fordi du ikke kunne forstå det lavere nivået språket.
Jeg synes ikke det er en helt dårlig idé å skrive et spill på Java, spesielt hvis spillet er enkelt, men du vil umiddelbart støte på ytelsesproblemer i Java hvis du bruker det som en krykke.
Kan kort sagt Java tas seriøst for alvorlig spillutvikling. Dette inkluderer tung grafikk, raskt spill uten forsinkelse og muligens, og enkel bytte til konsoller?
-
Tung grafikk: Mulig, men du kommer til å gjøre det samme i Java / LWJGL som du er i C ++ / GL: skriver byte til GPU-buffere og / eller bruker utdaterte visningslister som Minecraft gjør. Hvis du ikke forstår minneadministrasjonen, vil du heller ikke gjøre dette riktig.
-
Rask spill uten forsinkelse: Ikke en enkel oppgave på noe språk, og det er mer sannsynlig at du skyter deg selv i foten uten å legge tanker i det.
-
Nei, Java kommer ikke til å være tilgjengelig på konsoller.
Kommentarer
- Som et sidespørsmål, hva erstattet visningslistene da de ble utfaset?
- @Suds: Programmerbar rørledning, tror jeg.
- ha! allerede dekket den. VBO-er : gamedev.stackexchange.com/questions/22170/…
- Mobile plattformer kan være betraktet som konsoller. Jeg skjønner at han sannsynligvis snakket om de tre store, men Android bruker Java og det er laget mange spill for det.
- @ Amplify91 ja noen få spill er skrevet i java for android. Men mest bra spill og sannsynligvis alle grafikkintensive eller flerplattformspill er skrevet i C ++ ved bruk av Android NDK.
Svar
En eksper Enced programmerer vil vanligvis kjenne mange programmeringsspråk – å lære ekstra programmeringsspråk er ikke for vanskelig når du kjenner et godt. Imidlertid vil jeg på det sterkeste anbefale at C ++ ikke skal være ditt førstespråk, og sannsynligvis ikke det andre heller.
Dette skyldes at C ++ får mye av effektiviteten av å ikke gjøre noen signifikant kjøretidsfeilkontroll. For eksempel får tilgang til et element fra slutten av en matrise i Java alltid et unntak som forteller programmereren nøyaktig hva som er galt.I C ++ kan du være heldig, og den vil krasje med en gang, men veldig ofte vil den stille søppel i andre data, og feilen vil ikke dukke opp før mye senere .
Jeg foreslår at du holder deg til Java foreløpig (eller bytter til C # hvis du foretrekker det). Dermed kan du få ting gjort raskere enn å bruke C ++, og ytelse på en PC burde ikke være et problem.
Tenk på å lære C ++ etter at du har fullført noen få prosjekter på tryggere språk. C ++ er det du trenger for de fleste profesjonelle spillutviklingsjobber.
Merk at med unntak av at C # / XNA får et spill du skrev på en konsoll, krever du at du oppretter et selskap, med et kontor, og har et stort budsjett tilgjengelig for utviklingsmaskinvare og andre utgifter.
Kommentarer
- Dette gjelder også eksepsjonelt fordi andre språk utover C ++ vil gi deg en følelse av prestasjon. C ++ kan ta hundrevis av timer før det kan føles som ingenting. Hvis du først lærer andre språk, kan du få føttene dine våte.
- Kommentarene dine om manglende feilhåndtering er virkelig om C (og såkalt C ++ -kode som egentlig er C). C ++ har standardbiblioteker (og standard malbiblioteker) som har mye bedre feilhåndtering enn det du beskriver. C ++ har også leverandørbaserte biblioteker (for eksempel MFC) som gir anstendig feilhåndtering.
Svar
Ansvarsfraskrivelse: Dette svarer ikke akkurat på spørsmålet ditt. Imidlertid har jeg forsøkt å (kort) nevne noen punkter som kan være av interesse for deg.
Årsaken til at du ser så mye om C ++ er fordi C ++ fremdeles er industristandarden – det vanligste språket for konsoller osv.
Java brukes ikke ofte. Minecraft er et ganske populært spill som gjorde det stort med Java; men det er ikke så bra grafisk. Spiral Knights er ikke dårlig – også laget i Java, med betydelig grafikk.
Hvis du liker Java, er C # veldig lik i syntaksen, med den fordelen at den kan interop med C ++ – så ting på lavt nivå kan gjøres i C ++ om nødvendig. Unity kan bruke C # for skripting, og XNA er et utmerket valg.
Igjen er Java ikke mye brukt. Hvis du liker stilen og syntaksen, jeg tror du vil finne C # som en veldig lik, veldig hyggelig kodeopplevelse.
Jeg håper drømmene dine gjør det, det er veldig gøy underveis:)
Kommentarer
- Mange unøyaktigheter i dette innlegget. Minecraft " dårlig " grafikk er ikke (sterkt) relatert til språket. MC dårlig ytelse er direkte relatert til at Java er et dårlig språk for spill fordi STOR ytelsesproblemer, og LWJGL er et uegnet bibliotek for store kodingsprosjekter av samme grunn . Men den største faktoren var Notch
dårlig koding og implementering, som løses … sakte. C # gir deg alle oppgraderingene av administrert minne uten de fleste Java-ytelsesproblemer. Ulempen er at C # er sterkt Microsoft-sentrert for både spill og applikasjoner.
- @EfEs: Jeg hater å bryte det til deg, men administrert minne er forferdelig for spill, og folk som koder spill i XNA må bruke mer tid på å administrere minne enn folk som koder i C ++. GCs ikke-deterministiske natur betyr at du må samle praktisk talt alt og unngå tildeling som pesten – ikke slik språket skulle brukes.
- Dette svaret var ikke ment å være 100% nøyaktig ; Jeg siterte bare eksempler jeg vet vagt om. DV gjerne.
- @DeadMG Jeg vet at C ++ er veien å gå, jeg prøvde bare å forklare at C # er bedre enn Java for spill.
- Å være lang C # utvikler (ikke spillutvikler trodde) Jeg tror at pooling og minnehåndtering er store problemer for ethvert dårlig designet system. Mennesker med C / C ++ tankesett og utviklingsmåter jeg kjenner, kniper nesten ikke inn i det administrerte minnet, design og arkitekturmønstre som må brukes, og utnytter dem på et språk som Java / C #. Det jeg prøver å si, er ikke at C / C ++ teknikker eller produkter er dårlige, men at selv om du bruker enklere språk når det gjelder syntaks (som Java og C #), trenger du fortsatt mye erfaring for å designe spillet ditt riktig måte.
Svar
Se dude, det enkle svaret på «Er Java levedyktig for game dev «er et åpenbart ja. Du kan bruke hvilket som helst programmeringsspråk for å lage spill. Det betyr ikke at du burde .
Sannsynligvis de aller tingene som gjør at du slukker for C ++ ( minnehåndtering på lavt nivå, ingen søppeloppsamler, å være oppmerksom på pekere, strukturer som arrays osv.) er de tingene du bør lære hvis du vil utnytte en datamaskins ressurser mest effektivt .Spillene dine vil kjøre best hvis du utnytter datamaskinens ressurser mest effektivt.
Java gjør noen ting (for eksempel sjekk av matriser) som bare gjør at den kjører saktere. I denne optimaliserte koden for Java Perlin-støyeksempel, kommenterte forfatteren «(array-tilgang er mye tregere enn medlemstilgang)». Denne typen ting er ganske kontraintuitivt fra en C ++ bakgrunn. Men i Java, slike ting er det.
Jeg sier slutte å unnvike kulen, lære C ++ og bruke den.
Svar
Dette svarer ikke på spørsmålet ditt; grafikk- og konsollproblemene ser ut til å være noe du veldig mye trenger å vurdere. Også GC påvirker ytelsen. Men det jeg skriver om:
Hvis du skriver store, komplekse OO-programmer, vil du skrive dem 5 ganger raskere i Java enn C ++. Dessuten vil vedlikehold bli langt enklere. Jeg byttet, (riktignok for programvare som ikke er spill), og produktiviteten min steg. C #, et annet godt alternativ, er vanskeligere å lære enn Java fordi det er mye mer av det. Når du vet det, kan du skrive kode enda raskere enn i Java; det gir deg mange triks. Imidlertid finner jeg disse triksene kan gjøre vedlikehold vanskelig. Og så er det Java-doc, som hjelper til med Sun-bibliotekene og din egen gamle kode. C # har ingenting som det.
Jeg gjorde et stort hårete spill i Java og syntes språket var perfekt, men grafikken min var elementær, og det var ikke en skytespill der tiendedels sekund var en evighet til Jeg forventer å legge mye til det senere, mens jeg tror de fleste bare skriver og skriver et helt nytt spill.
Svar
Du bør gjøre det på språket du kjenner best til du har råd til en formell utdannelse (Bachelor of Science?) i datavitenskap, med vekt på spilldesign . Du kan muligens bruke spillet ditt for å få stipend, spesielt hvis du kan si «Jeg gjorde dette uten noen formell opplæring i Java»
Moderne JVM, selv den fra Oracle, har mange, mange funksjoner for å løse bekymringene folk har tatt opp her. Du kan bruke forskjellige søppeloppsamlere for å få mer deterministisk søppeloppsamleradferd. Jeg har ikke lang erfaring med 3D-bibliotekene – bare litt med Java3D – men ingen her ser ut til å ha klaget på dem. Escape-analyse tillater nå låsing og mye raskere / ubetydelig tildeling av svært kortvarige objekter.
Problemet er at om du velger Java av C ++, må du lære deg hvordan du bruker samtidighet riktig og har god forståelse for minnestyring. Når alt kommer til alt, kan du like godt skru opp med malloc
som du kan med new
. Jeg vet ikke hvordan verktøyene er for C ++, men profileringsverktøyene for Java er ganske enkle å bruke, gratis og integrert med IDE. Du kan bruke dem til å spore ytelsesproblemer og lære .
Kommentarer
- Formell utdannelse i CS er verdt en jack-shit for faktiske programmeringsferdigheter i alle fagområder. Jeg ville vite, jeg ' m i mitt tredje år.
- Definitivt uenig med DeadMG. Etter å ha uteksaminert og plukket kurs jeg likte, tok CS spillutviklingskreftene mine fra 10% til 100%. Det gjorde ikke ' t lære meg brukergrensesnitt, ikonografi osv. men faktisk, ekte koding.
- @ ashes999: Da var du heldig. Kurset mitt er verdiløst og jeg vet at der er mange andre som føler det samme.
- @DeadMG det ' er vanskelig å se når du ' studerer Når du først har jobbet et par år F / T, og lært andre komplette ferdigheter, vil du ' se. Jeg gjorde det. Men kanskje Jeg tok bare mye oppmerksomhet og prøvde å bruke alt på min spillutviklerhobby.
- Jeg ' vil si at det avhenger av skolen og professoren. Jeg hadde noen flotte programmeringstimer der jeg lærte massevis; og jeg hadde noen få der jeg faktisk følte at jeg mistet kunnskapen ved å delta. Det ' handler om å ha en god professor eller ikke. IMO.