Gå til innhold

Bruke java til å lage 3d-onlinespill


Anbefalte innlegg

Nok en gang, I beg to differ.

 

OpenGL er orginalt skrevet for C, og bare det i seg selv er et kjempeproblem for java.

At OpenGL er et C API, er iallefal ikke et "kjempeproblem". Hva får deg til å tro det? Spillutvikleren skriver koden sin i Java, og holder ikke på med JNI selv. Fins flere JNI wrappere for OpenGL

( http://lwjgl.org/ -- https://jogl.dev.java.net/ )

 

Er nok en eller flere veldig gode grunner til at java ikke er en akseptert spillutviklingsplatform, at bedrifter heller vil bruke tusenvis av ekstra timer for å skrive det i c++ isteden har nok sine grunner...

Akkurat som at Windows har mye større markedsandeler fordi det det er et så mye bedre OS?

 

Java har heller ikke noen direkte måter å kjøre operativsystemkall, noe som kan være kjekt å ha...

Forklar gjerne hva det har med spillutvikling å gjøre..

 

Når det gjelder spillutvikling i 4. generasjonsspråk, har jeg mye mer tro på C# enn Java (MS XNA Game Studio er faktisk veldig brukendes).

9438504[/snapback]

Jeg snakker om spillutvikling for flere platformer, ikke bare Windows. .NET kjører også i sin egen runtime.

 

De eneste Javaspillene jeg har sett er av laber kvalitet og lav fps (med unntak av en Raycaster, men det er litt for oldschool til at det er noe imponerende)

Biased.

Lenke til kommentar
Videoannonse
Annonse
Akkurat som at Windows har mye større markedsandeler fordi det det er et så mye bedre OS?

Har vært det veldig lenge, det er først nå linux begynner å tenke brukervennlighet istedenfor frihet og nerder. OS X er jo også på vei, men med helt motsatt tankegang av linux, nemlig at brukeren skal sitte på en boks der det ikke er mulig å gjøre noe galt.

 

Java har heller ikke noen direkte måter å kjøre operativsystemkall, noe som kan være kjekt å ha...

Forklar gjerne hva det har med spillutvikling å gjøre..

Fordi OS ofte inneholder optimaliserte funksjoner for spesielle oppgaver som gjerne går igjen ofte. Disse er optmialisert på OS-nivå, og finnes nødvendig vis ikke i andre OS.

 

Når det gjelder spillutvikling i 4. generasjonsspråk, har jeg mye mer tro på C# enn Java (MS XNA Game Studio er faktisk veldig brukendes).

9438504[/snapback]

Jeg snakker om spillutvikling for flere platformer, ikke bare Windows. .NET kjører også i sin egen runtime.

Enig, men jeg har også mer tro på C#, og dersom Mono får bedre fotfest støtter C# plutselig linux og os x også.

 

De eneste Javaspillene jeg har sett er av laber kvalitet og lav fps (med unntak av en Raycaster, men det er litt for oldschool til at det er noe imponerende)

Biased.

9445593[/snapback]

Utifra signaturen din tør jeg påstå at du er den som er mest biased her.

Lenke til kommentar
Utifra signaturen din tør jeg påstå at du er den som er mest biased her.

 

Akkurat; jeg vet nøyaktig hva det innebærer å skrive 3D grafikk i Java og hvilke fordeler/ulemper det har kontra det å skrive lignende i C/C++. Og utifra kommentarene deres å dømme så er jeg rimelig sikker på at verken du Nazgul eller andre C++/C# fanboys som poster i denne tråden ikke har tilsvarende erfaring.

 

Jeg er ferdig med denne tråden.

Endret av krigun
Lenke til kommentar
Nok en gang, I beg to differ.

 

OpenGL er orginalt skrevet for C, og bare det i seg selv er et kjempeproblem for java.

At OpenGL er et C API, er iallefal ikke et "kjempeproblem". Hva får deg til å tro det? Spillutvikleren skriver koden sin i Java, og holder ikke på med JNI selv. Fins flere JNI wrappere for OpenGL

( http://lwjgl.org/ -- https://jogl.dev.java.net/ )

 

Er nok en eller flere veldig gode grunner til at java ikke er en akseptert spillutviklingsplatform, at bedrifter heller vil bruke tusenvis av ekstra timer for å skrive det i c++ isteden har nok sine grunner...

Akkurat som at Windows har mye større markedsandeler fordi det det er et så mye bedre OS?

 

Java har heller ikke noen direkte måter å kjøre operativsystemkall, noe som kan være kjekt å ha...

Forklar gjerne hva det har med spillutvikling å gjøre..

 

Når det gjelder spillutvikling i 4. generasjonsspråk, har jeg mye mer tro på C# enn Java (MS XNA Game Studio er faktisk veldig brukendes).

9438504[/snapback]

Jeg snakker om spillutvikling for flere platformer, ikke bare Windows. .NET kjører også i sin egen runtime.

 

De eneste Javaspillene jeg har sett er av laber kvalitet og lav fps (med unntak av en Raycaster, men det er litt for oldschool til at det er noe imponerende)

Biased.

9445593[/snapback]

 

Hva er poenget med å utvikle spill for flere platformer? Såvidt jeg vet er det bare MacOS og Windows de blir utviklet til, og den beste måten å gjøre det på (uten å måtte gi avkall på en hel del annet) er å skrive det i C++ og kompilere det for hver platform. Ved å velge Java, må du nødvendigvis senke på en del ting (si ifra om du finner noen velegnede spillutviklere med god erfaring som har lyst til å ta på java). Den dagen blizzard søker etter "Experienced Java developers for our next-generation of game-engines" har allerede apokalypsen falt.

 

Operativsystemkall fra en platform er mye viktigere enn du tror. Hva om man trenger noe som ikke er innebygd i java fra før? Om man for eksempel har lyst til å bruke Geometry shaders f.eks? MMX? Legge spillet til firewallen automatisk?

Det er litt praktisk å ihvertfall ha muligheten. Et spill dreier seg ikke bare om å få noe fram på skjermen, det skal også være behagelig.

 

Angående windows :

Grunnen til at spill blir utviklet tin windows, er ikke bare fordi de kapitalistisk sett er overlegne. Windows er et mye bedre operativsystem en det folk gir det credit for. Det er heller ikke helt uten grunn at det er så mange som bruker det. Du må tenke på at tidligere, er det bedrifter som bygger pcer, servere etc. som faktisk har gjort et konkret valg på at "vi kjører windows" som har gjort det så populært idag. Tror du virkelig at privatpersoner velger det mest populære operativsystemet? Folk flest vet ikke forskjell på en skjerm og en harddisk.

 

Windows er forøvrig det operativsystemet som er mest lagt opp for utvikling og videreutvikling. Det har tilogmed en innebygd debugger. Så istedenfor å få "Segmentation fault" får du den beryktede "This program has caused an illegal operation" som også gir informasjon om feilen; hvor det er, hvilken peker, hvor pekeren pekte, hva som står i registrene etc. Dette er jo selvsagt med på å fortelle hvilket operativsystem et spillutviklingsfirma helst vil velge; det er enklere å utvikle til windows = det tar kortere tid = det er billigere. Logikk.

Det er også fullt mulig å skrive cross-platform spill i noe annet enn Java.

World Of Warcraft funker like fint til Mac som til PC.

Quake3/4 funker like greit på Mac, Windows og Linux (linux er litt verre, men det er mulig)

 

Du sier du har god erfaring på OpenGL til Java (JGL?), har du mye erfaring innen OpenGL til C++?

 

Jeg har ingen tro på Java spillutvikling overhodet. Det har vært i lufta så lenge, men hittil har jeg ikke sett ett eneste vellykket forsøk.

Lenke til kommentar

Java er bra til det Java er bra til, det vil si lightweight småprogrammer som ikke trenger forferdelig mye prosessorytelse (LimeWire f eks) og det er relativt lett å utvikle i.C/ C++ er god til alt Java er god til, pluss mer, men det er mer tricky på mange måter og vanskeligere å lære seg. C/C++ er mer close to the metal, mens Java jobber gjennom et annet program. Uten at jeg skal kreve at jeg har veldig mye peiling på begge deler. :)

Endret av LostOblivion
Lenke til kommentar
Java er bra til det Java er bra til, det vil si lightweight småprogrammer som ikke trenger forferdelig mye prosessorytelse (LimeWire f eks) og det er relativt lett å utvikle i.C/ C++ er god til alt Java er god til, pluss mer, men det er mer tricky på mange måter og vanskeligere å lære seg. C/C++ er mer close to the metal, mens Java jobber gjennom et annet program. Uten at jeg skal kreve at jeg har veldig mye peiling på begge deler. :)

9473641[/snapback]

Poeng, bare se på Azureus. Kneler så det synger etter, og det burde ikke være SÅ heavy.

Lenke til kommentar
Java er bra til det Java er bra til, det vil si lightweight småprogrammer som ikke trenger forferdelig mye prosessorytelse (LimeWire f eks) og det er relativt lett å utvikle i.C/ C++ er god til alt Java er god til, pluss mer, men det er mer tricky på mange måter og vanskeligere å lære seg. C/C++ er mer close to the metal, mens Java jobber gjennom et annet program. Uten at jeg skal kreve at jeg har veldig mye peiling på begge deler. :)

9473641[/snapback]

Poeng, bare se på Azureus. Kneler så det synger etter, og det burde ikke være SÅ heavy.

9474370[/snapback]

 

Azureus tror jeg må være det beste javaprogrammet jeg noensinne har sett :)

Lenke til kommentar

	[System.Runtime.InteropServices.DllImport("OpenGL32.dll")]
public static extern unsafe void glVertexPointer(int size, uint type, int stride, void* pointer);

 

I C/C++ eller C# trenger man ikke skrive en OpenGL Wrapper, dessuten kan man, som man ser her, bruke pekere i begge språkene, noe som gjør dette mulig:

 

    public class DescribedVertexBuffer<T> : Buffer<T>, IVertexBufferInfo
   {
*snipp*
}

 

public unsafe void AssignVertexBuffer<T>(Generic.DescribedVertexBuffer<T> vb)
 {
 	// Disable all arrays, if any arrays are enabled, OpenGL will fail
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_NORMAL_ARRAY);
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_VERTEX_ARRAY);
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_TEXTURE_COORD_ARRAY);
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_COLOR_ARRAY);
 	m_vb_info = (Generic.IVertexBufferInfo)vb;
 	int x;
 	int size = (int)VertexDescriptor.GetElementSizeFromDescriptor(vb.Description.Elements[0]);
 	Descriptor desc;
 	byte* ptr = (byte*)vb.Address.ToPointer();
 	// Run through the vertex description.
 	for (x = 0; x < vb.Description.Elements.Length; x++)
 	{
   desc = vb.Description.Elements[x];

   switch (desc & Descriptor.Type)
   {
   	case Descriptor.Vertex:
     AssignVertex(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   	case Descriptor.TexCoord:
     AssignTexCoord(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   	case Descriptor.Normal:
     AssignNormals(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   	case Descriptor.Color:
     AssignColors(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   }

   ptr += VertexDescriptor.GetElementSizeFromDescriptor(desc);
 	}

 }

 

Dette er litt C# kode fra Glorg (Grafikkmotoren min)

Hva skjer her?

Jo, man skriver først noe som kalles en vertex descriptor, som rett og slett forteller glorg hvilken rekkefølge ting ligger i vertex bufferet, deretter tar glorg og lager en byte peker til vertex array minneområdet, og gir først f.eks. VertexPointer, og normalpointer etc. til OpenGL

 

Pekere er VELDIG hendig når det kommer til grafikk, men Java har ikke denne muligheten, som både C# og C/C++ har, dermed må man først skrive en wrapper i et annet språk, fortrinnsvis C++.

 

Uansett så blir java delen av spillet bare brukt i det øverset laget, og mye kode må nødvendigvis skrives i C++ uansett.

 

Jeg sier ikke at Java er uegnet til å lage spill i, men det kan bare bli brukt i det aller øverste laget, og ikke i selve grafikkmotoren, dermed er det som regel brukt til scripting av spillet i etterkant (Chrome)

I wow, og veldig mange andre spill, blir Lua brukt til dette.

 

Altså konklusjonen er at spillmotorer ikke kan skrives fullt og helt i Java, men må nødvendigvis skrives i C++, dermed faller Java naturlig bort som alternativ.

Endret av GeirGrusom
Lenke til kommentar

Har ikke LWJGL blitt en del av java nå offisielt? Altså bruker du java 6 så ligger lwjgl der. Og da kan du lage spill med opengl som kan kjøres på linux,mac og windows uten å distribuere lwjgl.

 

 

	[System.Runtime.InteropServices.DllImport("OpenGL32.dll")]
public static extern unsafe void glVertexPointer(int size, uint type, int stride, void* pointer);

 

I C/C++ eller C# trenger man ikke skrive en OpenGL Wrapper, dessuten kan man, som man ser her, bruke pekere i begge språkene, noe som gjør dette mulig:

 

    public class DescribedVertexBuffer<T> : Buffer<T>, IVertexBufferInfo
   {
*snipp*
}

 

public unsafe void AssignVertexBuffer<T>(Generic.DescribedVertexBuffer<T> vb)
 {
 	// Disable all arrays, if any arrays are enabled, OpenGL will fail
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_NORMAL_ARRAY);
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_VERTEX_ARRAY);
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_TEXTURE_COORD_ARRAY);
 	OpenGL.NativeOpenGL.glDisableClientState(OpenGL.NativeOpenGL.GL_COLOR_ARRAY);
 	m_vb_info = (Generic.IVertexBufferInfo)vb;
 	int x;
 	int size = (int)VertexDescriptor.GetElementSizeFromDescriptor(vb.Description.Elements[0]);
 	Descriptor desc;
 	byte* ptr = (byte*)vb.Address.ToPointer();
 	// Run through the vertex description.
 	for (x = 0; x < vb.Description.Elements.Length; x++)
 	{
   desc = vb.Description.Elements[x];

   switch (desc & Descriptor.Type)
   {
   	case Descriptor.Vertex:
     AssignVertex(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   	case Descriptor.TexCoord:
     AssignTexCoord(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   	case Descriptor.Normal:
     AssignNormals(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   	case Descriptor.Color:
     AssignColors(new IntPtr(ptr), desc, (int)vb.GetStride());
     break;
   }

   ptr += VertexDescriptor.GetElementSizeFromDescriptor(desc);
 	}

 }

 

Dette er litt C# kode fra Glorg (Grafikkmotoren min)

Hva skjer her?

Jo, man skriver først noe som kalles en vertex descriptor, som rett og slett forteller glorg hvilken rekkefølge ting ligger i vertex bufferet, deretter tar glorg og lager en byte peker til vertex array minneområdet, og gir først f.eks. VertexPointer, og normalpointer etc. til OpenGL

 

Pekere er VELDIG hendig når det kommer til grafikk, men Java har ikke denne muligheten, som både C# og C/C++ har, dermed må man først skrive en wrapper i et annet språk, fortrinnsvis C++.

 

Uansett så blir java delen av spillet bare brukt i det øverset laget, og mye kode må nødvendigvis skrives i C++ uansett.

 

Jeg sier ikke at Java er uegnet til å lage spill i, men det kan bare bli brukt i det aller øverste laget, og ikke i selve grafikkmotoren, dermed er det som regel brukt til scripting av spillet i etterkant (Chrome)

I wow, og veldig mange andre spill, blir Lua brukt til dette.

 

Altså konklusjonen er at spillmotorer ikke kan skrives fullt og helt i Java, men må nødvendigvis skrives i C++, dermed faller Java naturlig bort som alternativ.

9504585[/snapback]

Lenke til kommentar
  • 1 år senere...

Har funnet en side der du kan skaffe deg det du trenger for å lage et onlinespill.

 

søk: www.garagegames.com

 

PS: Du kan downloade prøven, medn du må kjøpe hele pakka.

 

Du kan også kjøpe oppgraderinger feks. spesialefekter osv. spessialefektene koster over 100 dollar.

Så tror det der programmet er knallbra

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...