<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Stängd. Denna fråga är utanför ämnet . För närvarande accepteras inte svar.

Kommentarer

  • Är inte ' t minecraft byggt med java? Eller främst OpenGL? Åh och kolla in C # om du inte är 100% inställd på java, eftersom det är fantastiskt.
  • Varför don ' t du kommer till Stack Overflow C ++ Chat ? Vi älskar C ++, vi tror att det absolut kan användas rätt, och vi vet hur man gör det och vi ' skulle gärna dela det.
  • Minecraft är java + LWJGL + Notch ' s kodningsförmåga, så prestationsmässigt är det FÖRSKRIVBART. språk kommer inte att hjälpa dig i framtiden. Förgrena dig lite, antingen C ++ eller något annat som Python. Det tar tid, men det gör dig till en bättre utvecklare.
  • Du ' kommer att få en hel del felinformation eftersom Java / C ++ krig brinner starkt, var beredd att be om specifika exempel innan jag accepterar en åsikt och också att undersöka mer på egen hand =) Med detta sagt, håller jag med @loganfsmyth att du kommer att behöva kunna många språk, för först då kan du välja rätt verktyg för alla uppgifter . Om du bara vill lära dig " spelstilsprogrammering " inom den närmaste framtiden, använd sedan det du ' är bekväm med (Java) och lär dig sedan C ++ senare. Heck, senare kan du göra innehållsrör i C # och spel i Java ME, svårt att förutsäga =)

Svar

Ja det är, kontrollera den här listan för ett bevis. Det här är några spel gjorda med Java med hjälp av The Lightweight Java Game Library (LWJGL). Det är ett ramverk på låg nivå som ger OpenGL för grafik av hög kvalitet och OpenAL för ljud. Det ger också input API. Med dessa kan du enkelt komma igång med seriös spelutveckling i Java.

Jag skriver just nu mitt andra 3D-spel som ett hobbyprojekt i Java, och jag älskar det bara. Tidigare skrev jag mina spel med C ++, men efter att ha bytt till Java finns det ingen väg tillbaka. Att stödja flera operativsystem med Java kan vara väldigt enkelt, till exempel mitt tidigare Java-spel, som jag utvecklade i Windows i ett år, arbetade direkt i Linux och i OS X med bara ett fel utan att behöva kompilera något på dessa plattformar.

Å andra sidan, med Java har du några problem.

  1. Sopuppsamlare. Som andra har sagt är icke-deterministisk minneshantering ett problem, och du måste koda det i åtanke.
  2. Brist på tredjepartsbibliotek. De flesta av de tillgängliga biblioteken stöder inte Java. Å andra sidan har du alltid möjlighet att ringa dessa inbyggda bibliotek också från Java, men det är mer arbete att göra det. Det finns också Java-portar eller färdiga omslag tillgängliga för populära bibliotek, till exempel använder jag JBullet – Java-port i Bullet Physics Library . Å andra sidan har Java ett enormt inbyggt klassbibliotek, vilket minskar behovet av tredjepartsbibliotek som inte är spelrelaterade. Bristen på bibliotek har inte varit ett problem för mig, men jag kan föreställa mig att det kan vara för andra.
  3. Java stöds inte av populära spelkonsoler och det finns ingen enkel övergång till dem från Java så långt som jag vet. Å andra sidan använder Android, som är en populär mobilplattform, någon form av Java. Detta är också ett alternativ, men undantag inte samma Java-kod för att fungera både på en PC och Android-enhet.
  4. Mindre community. De flesta spelprogrammerare använder C ++ och tycker inte mycket om Java. Don ” t förväntar dig att få så mycket hjälp från andra. Förvänta dig inte att få ett jobb inom spelutveckling utan C ++ – färdigheter.

Svar

Inte riktigt. Här ”s saken – för det första finns det väldigt lite när det gäller befintliga bibliotek för Java jämfört med praktiskt taget allt som är för C ++.

För det andra, Java som ett språk helt enkelt lämpar sig inte bra för spelutveckling – jag menar till exempel om du har att göra med GPU-buffertar, så tillhandahåller Java inte en språkfunktion som hjälper dig att säkerställa att de är korrekt låsta och olåsta eller kasseras, vilket C ++ gör. Dessutom är prestandaproblemet – och GC är icke-deterministisk, vilket är superdåligt för ett spel.

Jag har aldrig observerat något icke-indiespel som tillbringade betydande tid i en språk som inte kompilerades till inbyggd kod före körning, och även indiespel som gör det är en sällsynthet.Så min tro just nu är att det helt enkelt inte kan göras.

Om jag fortsätter att lära mig och förbättra Java nu, och det visar sig att senare Jag är skyldig att lära mig C ++, blir det svårt att göra omkopplaren?

Ja, absolut kommer det. Java och C ++ är väldigt olika, trots deras ytliga syntaktiska likheter. Java-upplevelse räknas nästan ingenting när man lär sig C ++.

Spel över grafik är ett livskraftigt val, och du kan se det i framgången med spel som Terarria och Minecraft. Men om du tänker skapa srs-grafik kommer det inte att vara möjligt i Java.

Kommentarer

  • +1 eftersom han angav tung grafik, snabbt spel utan fördröjning.
  • Java ' brist på osignerade datatyper står också emot det. Ja, du kan kringgå det, men det ' är inte perfekt och du ' kommer att använda kod som inte ' inte verkligen återspeglar underliggande data korrekt.
  • @deadmg Är fallet låst och olåst , hänvisar du till någon DirectX api-funktionalitet? & Kan du säg mig, vad ' är så dåligt med att ha icke-deterministisk GC.
  • Icke-deterministisk GC kan motsvara att tappa ramar, om du får dåligt stopp världen pausar och det låser upp saker längre än vad som krävs för att göra ramen. I praktiken händer det inte ' t ofta om du planerar ditt minne användning, JVM ' s samlare kan konfigureras för låg paus (väl inom säkra gränser för ramdroppning). Ändå är det ' ingen rolig sak att ta itu med. Det slutar med att du måste lämna tillbaka betydande mängder av produktiviteten som du fick när du lämnade C ++.
  • En start som du ' måste skriva om helt.

Svar

Så jag är väldigt seriös med spelutveckling, är Java fortfarande ett genomförbart val? Jag har försökt flera gånger att lära mig C ++, men jag gillar inte språket. Jag vet inte riktigt varför, men vanligtvis, när jag försöker lära mig, kan jag aldrig förstå ämnena.

Om din anledning att välja Java är att du inte kunde förstå C ++ kommer dina Java-program inte att vara tillräckligt snabba för grafik av hög kvalitet. Att använda ett språk på högre nivå borde bero på att det gör dig mer produktiv, inte på grund av att du inte kunde underskatta det lägre nivåspråket. Java, särskilt om spelet är enkelt, men du kommer omedelbart att stöta på prestandafrågor i Java om du använder det som en krycka.

Kan kort sagt Java tas på allvar för allvarlig spelutveckling. Detta inkluderar tung grafik, snabbt spel utan fördröjning och eventuellt och enkel byte till konsoler?

  1. Heavy Graphics: Möjligt, men du kommer att göra samma sak i Java / LWJGL som du är i C ++ / GL: skriva byte till GPU-buffertar och / eller använda föråldrade visningslistor som Minecraft gör. Om du inte förstår minneshanteringen kommer du inte heller att göra detta korrekt.

  2. Snabbt spel utan fördröjning: Inte en lätt uppgift på något språk, och du är mer benägna att skjuta dig själv i foten på något sätt utan att tänka på det.

  3. Nej, Java kommer inte att vara tillgängligt på konsoler.

Kommentarer

  • Som en sidofråga, vad ersatte visningslistorna när de upphörde?
  • @Suds: Programmerbar pipeline tror jag.
  • ha! täckte den redan. VBOs : gamedev.stackexchange.com/questions/22170/…
  • Mobila plattformar kan vara betraktas som konsoler. Jag inser att han förmodligen pratade om de tre stora, men Android använder Java och många spel skapas för det.
  • @ Amplify91 ja, några spel är skrivna i java för android. Men mest bra spel och förmodligen alla grafikintensiva eller flerplattesspel skrivs i C ++ med Android NDK.

Svar

En exper Enced programmerare kommer i allmänhet att kunna många programmeringsspråk – att lära sig extra programmeringsspråk är inte för svårt när du känner till ett väl. Men jag rekommenderar starkt att C ++ inte ska vara ditt första språk, och förmodligen inte det andra heller.

Det beror på att C ++ får mycket av sin effektivitet genom att inte göra någon betydande runtime-felkontroll. Till exempel kommer åtkomst till ett element från slutet av en array i Java alltid ett undantag som berättar för programmeraren exakt vad som är fel.I C ++ kan du ha tur och det kommer att krascha omedelbart, men mycket ofta kommer det tyst att skräpa bort andra data och felet kommer inte att visas förrän senare .

Jag föreslår att du håller fast vid Java för tillfället (eller byter till C # om du föredrar det). På så sätt kan du göra saker snabbare än att använda C ++, och prestanda på en dator borde inte vara ett problem.

Tänk på att lära dig C ++ efter att du har slutfört några projekt på säkrare språk. C ++ är det du behöver för de flesta professionella spelutvecklingsjobb.

Observera att med undantag av att C # / XNA får ett spel som du skrev på en konsol åtminstone måste du starta ett företag med ett kontor och har en stor budget tillgänglig för utvecklingshårdvara och andra utgifter.

Kommentarer

  • Detta gäller också exceptionellt eftersom andra språk utöver C ++ ge dig en känsla av prestation. C ++ kan ta hundratals timmar för vad som kan kännas som ingenting. Att lära sig andra språk först gör att du blir fuktiga.
  • Dina kommentarer om bristande felhantering är verkligen om C (och så kallad C ++ -kod som verkligen är C). C ++ har standardbibliotek (och standardmallbibliotek) som har mycket bättre felhantering än vad du beskriver. C ++ har också leverantörsbibliotek (som MFC) som tillhandahåller anständig felhantering.

Svar

Ansvarsfriskrivning: Detta svarar inte exakt på din fråga. Jag har dock försökt (kortfattat) nämna några punkter som kan vara av intresse för dig.

Anledningen till att du ser så mycket om C ++ är att C ++ fortfarande är industristandarden – det vanligaste språket för konsoler etc.

Java används inte ofta. Minecraft är ett ganska populärt spel som gjorde det stort med Java; men det är inte så bra grafiskt. Spiral Knights är inte dåligt – även tillverkat i Java, med betydande grafik.

Om du gillar Java är C # väldigt lika i syntax, med fördelen att den kan interop med C ++ – så låga nivåer kan göras i C ++ om det behövs. Enhet kan använda C # för skript, och XNA är ett utmärkt val.

Återigen används Java inte i stor utsträckning. stilen och syntaxen, jag tror att du kommer att hitta C # som en mycket liknande, mycket trevlig kodningsupplevelse.

Jag hoppas att dina drömmar gör det, det är mycket roligt på vägen:)

Kommentarer

  • Massor av felaktigheter i de här inläggen. Minecraft " dåligt " grafik är inte (starkt) relaterad till språket. MC dålig prestanda är direkt relaterad till att Java är ett dåligt språk för spel eftersom STOR prestandaproblem och LWJGL är ett olämpligt bibliotek för stora kodningsprojekt av samma anledning Men den största faktorn var Notch

    dålig kodning och implementering, som fixas … långsamt. C # ger dig alla ups av hanterat minne utan de flesta Java-prestandaproblem. Nackdelen är att C # är starkt Microsoft-centrerad för både spel och applikationer.

  • @EfEs: Jag hatar att bryta det till dig, men hanterat minne är hemskt för spel och människor som kodar spel i XNA måste spendera mer tid på att hantera minne än människor som kodar i C ++. GC: s icke-deterministiska natur innebär att du måste slå ihop praktiskt taget allt och undvika allokering som pesten – inte hur språket skulle användas.
  • Detta svar var inte tänkt att vara 100% korrekt ; Jag citerade bara exempel som jag vet vagt om. Gör gärna DV.
  • @DeadMG Jag vet att C ++ är vägen att gå, jag försökte bara förklara att C # är bättre än Java för spel.
  • Att vara lång C # utvecklare (inte spelutvecklare trodde) Jag tror att pooling och minneshantering är stora problem för alla dåligt utformade system. Människor med C / C ++ tänkesätt och utvecklingssätt som jag känner känner knappast in i det hanterade minnes-, design- och arkitekturmönstret som måste användas och utnyttjar dem på ett språk som Java / C #. Vad jag försöker säga är inte att C / C ++ tekniker eller produkter är dåliga, men att även om du använder enklare språk när det gäller syntax (som Java och C #) behöver du fortfarande mycket erfarenhet för att utforma ditt spel rätt sätt.

Svar

Titta dude, det enkla svaret på ”Är Java livskraftigt för spelutveckling ”är ett uppenbart ja. Du kan använda valfritt programmeringsspråk för att skapa spel. Det betyder inte att du ska .

Förmodligen just det som stänger av dig från C ++ ( minneshantering på låg nivå, ingen skräpsamlare, att behöva vara uppmärksam på pekare, strukturer som matriser etc) är de saker du bör lära dig om du vill utnyttja en dators resurser mest effektivt .Dina spel kommer att fungera bäst om du utnyttjar datorns resurser på bästa sätt.

Java gör vissa saker (som matrisgränskontroll) som bara gör att den går långsammare. I den här optimerade Java Perlin-bruskodkoden, kommenterade författaren ”(array-åtkomst är mycket långsammare än medlemsåtkomst)”. Den här typen av saker är ganska kontraintuitiv från en C ++ bakgrund. Men i Java, sådana saker är.

Jag säger sluta undvika kulan, lära dig C ++ och använda den.

Svar

Detta svarar inte på din fråga. grafik- och konsolfrågorna verkar vara något du verkligen behöver tänka på. GC påverkar också prestanda. Men vad jag skriver om:

Om du skriver stora, komplexa OO-program skriver du dem 5 gånger snabbare i Java än C ++. Dessutom kommer underhåll att bli mycket lättare. Jag bytte, (visserligen för icke-spelprogramvara), och min produktivitet sköt upp. C #, ett annat bra alternativ, är svårare att lära sig än Java eftersom det är mycket mer av det. När du vet det kan du skriva kod ännu snabbare än i Java; det ger dig många knep. kan göra underhållet svårt. Och sedan finns det Java-doc, som hjälper till med Sun-biblioteken och din egen gamla kod. C # har inget som det.

Jag gjorde ett stort hårigt spel i Java och tyckte att språket var perfekt, men min grafik var elementär och det var inte en skytt där en tiondel av en sekund var en evighet till spelare. Jag förväntar mig också att lägga mycket på det senare, medan jag tror att de flesta bara går och skriver ett helt nytt spel.

Svar

Du bör göra det på det språk du känner bäst tills du har råd med en formell utbildning (kandidatexamen?) inom datavetenskap, med betoning på speldesign . Du kan eventuellt använda ditt spel för att få ett stipendium, speciellt om du kan säga ”Jag gjorde det utan någon formell utbildning i Java”

Moderna JVM, även den från Oracle har många, många funktioner för att ta itu med de bekymmer som människor har tagit upp här. Du kan använda olika sopsamlare för att få ett mer deterministiskt sopuppsamlarbeteende. Jag har inte lång erfarenhet av 3D-biblioteken – bara lite med Java3D – men ingen verkar här ha klagat på dem. Escape-analys möjliggör nu låsning och mycket snabbare / försumbar allokering av mycket kortlivade objekt.

Problemet är, oavsett om du väljer Java för C ++, måste du lära dig att använda samtidighet på rätt sätt och ha en god förståelse för minneshantering. När allt kommer omkring kan du lika enkelt klara av med malloc som du kan med new. Jag vet inte hur verktygen är för C ++, men profileringsverktygen för Java är ganska enkla att använda, gratis och integrerade med IDE. Du kan använda dem för att spåra prestandaproblem och lära .

Kommentarer

  • Formell utbildning i CS är värt jack-shit för faktiska programmeringsfärdigheter i alla ämnen. Jag skulle veta, jag ' m under mitt tredje år.
  • Definitivt oense med DeadMG. Efter examen och valde kurser som jag gillade tog CS min spelutvecklingskrafter från 10% till 100%. Det gjorde inte ' t lär mig användargränssnitt, ikonografi, etc. men faktisk, riktig kodning.
  • @ ashes999: Då fick du tur. Min kurs är värdelös och jag vet att det är många andra som känner samma sak.
  • @DeadMG det ' är svårt att se när du ' studerar När du väl har arbetat ett par år F / T och lärt dig andra kompletterande färdigheter ser du '. Jag gjorde det. Men kanske Jag fick bara mycket uppmärksamhet och försökte tillämpa allt på min spelutvecklingshobby.
  • Jag ' säger att det beror på skolan och professorn. Jag hade några bra programmeringskurser där jag lärde mig massor; och jag hade några där jag faktiskt kände att jag tappade kunskap genom att delta. Det ' handlar om att ha en bra professor eller inte. IMO.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *