2D Menü für 3D Spiel

tdc

Bekanntes Mitglied
Hi,

Ich habe versucht ein 2D-Menü für mein 3D-Spiel zu programmieren. Einzeln funktioniert das auch jeweils perfekt, aber sobald ich das Spiel über das Menü starte, sieht man nur einen schwarzen Bildschirm. Daraufhin habe ich den Code des Menüs "auseinandergenommen" und herausgefunden, dass es an der Funktion "loadTexture" liegt.

Diese Methode sieht so aus:
Java:
public Texture loadTexture(String name, String datatype)
	{
		Texture texture = null;
		try
		{
			texture = TextureLoader.getTexture(datatype, new FileInputStream(new File("").getAbsolutePath()+"/src/ressources/images/font/"+name));
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		return texture;
    }

Ich benutze lwjgl uns slick zum Laden der Textur. Woran könnte das denn liegen? Die Texturen werden nur für das Menü geladen, das Spiel hat damit gar nichts zu tun.
 

Kr0e

Gesperrter Benutzer
Sicher, dass der Fehler beim Laden liegt ? Ich vermute eher, dass das Problem beim ERSTEN Zeichnen der Textur ist. Was benutzt du denn, für das 3D Spiel ? Reines LWJGL ? Ich kenee ähnlcihe Phänomene wenn gerade per glBindTexture bereits ne TExture bebunden ist und wenn man dann selber dazwischen funkt, ohne die ursprüngliche Texture erneut zu binden, können soclhe Probleme auftreten. Kann bei dir aber auch was anderes sein.

- Ist ohne weitere Infos schwer zu sagen. Generell ist das Laden mit der Funktion aber vollkommen ok.
 

tdc

Bekanntes Mitglied
Danke für die Antwort.

Also ich beschreibe mal, wie ich darauf gekommen bin, dass es an dieser Methode Liegt:
Ich hab das ganze etwas umständlich gestaltet, da ich nicht wollte, dass beim starten des Spiels ein neues Fenster geöffnet wird. Der Anfang des Codes für die Klasse Window sieht so aus:
Java:
public class Window
{
	long lastFrame;
	int fps;
	long lastFPS;
	
	boolean fullscreen = false;
	
	WindowContent content;
	boolean contentChanged = false;
	
	public void createWindow()
	{
		try
		{
			Display.setDisplayMode(new DisplayMode(800, 600));
			Display.create();
			Display.setLocation(100, 100);
		}
		catch (LWJGLException e)
		{
			e.printStackTrace();
			System.exit(0);
		}
		
		//setContent(new MainMenu(this));
		
		Game game = new Game();
		setContent(game);
		game.initGame();
		

		while (!Display.isCloseRequested())
		{
			int delta = getDelta();
			update(delta);
			content.update(delta);
			if(!contentChanged)
			{
				updateFPS();
				content.drawOpenGL();
				Display.update();
				Display.sync(200); // cap fps to 60fps
			}
			else
			{
				contentChanged = false;
			}
		}
	}
	
	public void setContent(WindowContent c)
	{
		content = c;
		content.initOpenGL();
		lastFPS = getTime();
		getDelta();
		contentChanged = true;
	}
        ...


Eigentlich steht an der Stelle:
Java:
		//setContent(new MainMenu(this));
		
		Game game = new Game();
		setContent(game);
		game.initGame();
nur
Java:
setContent(new MainMenu(this));
aber zum testen habe ich das mal so geändert.

Also mit der Methode "setContent(WindowContent c)" kann man den Inhalt des Fensters verändern und auch nur der derzeitige content wird geupdated, gezeichnet, etc. .

Der Code (ganz oben) funktioniert so, aber sobald ich die Kommentarschrägstriche vor "setContent(new MainMenu(this))" entferne, geht es nicht mehr. Genau das kommt mir merkwürdig vor, denn das MainMenu wird noch nichtmal gezeichnet.

Die Klasse MainMenu wiederrum sieht so aus:
Java:
public class MainMenu
	extends WindowContent
{
	Window window;
	Vector<MenuButton> labels;
	
	public MainMenu(Window w)
	{
		window = w;
		loadTexture("Singleplayer.png", "PNG");
		
		// liegt es an loadTexture ???
		
		/*
		labels = new Vector<MenuButton>();
		labels.addElement(new MenuButton(loadTexture("Singleplayer.png", "PNG"), 100, 100));
		labels.addElement(new MenuButton(loadTexture("Multiplayer.png", "PNG"), 100, 180));
		labels.addElement(new MenuButton(loadTexture("Options.png", "PNG"), 100, 260));
		labels.addElement(new MenuButton(loadTexture("Credits.png", "PNG"), 100, 340));
		labels.addElement(new MenuButton(loadTexture("Quit.png", "PNG"), 100, 420));
		*/
	}

	public void initOpenGL()
	{
		int width = Display.getDisplayMode().getWidth();
		int height = Display.getDisplayMode().getHeight();
		
		glEnable(GL_TEXTURE_2D);               
        
		glClearColor(0.0f, 0.0f, 0.0f, 0.0f);          
        
        	// enable alpha blending
        	glEnable(GL_BLEND);
        	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        
        	glViewport(0,0,width,height);
		glMatrixMode(GL_MODELVIEW);

		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glOrtho(0, width, height, 0, 1, -1);
		glMatrixMode(GL_MODELVIEW);
	}
	
	public void drawOpenGL()
	{
		...
		//unwichtig wird beim Test eh nicht ausgeführt
		...
	}

	public void update(int delta)
	{
		...
		//unwichtig wird beim Test eh nicht ausgeführt
		...
	}
	
	public Texture loadTexture(String name, String datatype)
	{
		Texture texture = null;
		try
		{
			texture = TextureLoader.getTexture(datatype, new FileInputStream(new File("").getAbsolutePath()+"/src/ressources/images/font/"+name));
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		return texture;
    }

Erst habe ich gedacht, es könnte an initOpenGL() liegen, aber durch ausprobieren hab ich rausgefunden, dass es nur an loadTexture() liegen kann.

Endergebnis: Statt dem Spiel nur ein schwarzer Bildschirm, FPS-Counter zeigt konstant 200 FPS an.

Ausserdem: Im Spiel verwende ich bisher KEINE Texturen, sondern nur Farbe und Striche, an fehlerhaft geladenen Texturen sollte es also nicht liegen.


Hoffentlich kann mir jemand helfen, ich weiß nämlich nicht mehr weiter. Vielleicht habe ich auch nur etwas einfaches übersehen. Jedenfalls brauche ich loadTexture() eigentlich nur zum Laden von Bildern für das 2D-Menü.
 
Zuletzt bearbeitet:

Evil-Devil

Top Contributor
Erste Frage: Wieso willst du unbedingt verhindern das ein Fenster geöffnet wird? Das will mir irgendwie nicht in den Sinn.

Zweitens: Die Grundstruktur deiner LWJGL App sieht irgendwie wirr aus. Hast du dir im Wiki bzw. Util/Src Jar die Beispiele angeschaut? Die sind imho wesentlich besser strukturiert.

Wenn ich das richtig interpretiere versuchst du jeweils den Fensterinhalt zu ersetzen. Dann verliere ich den Faden. IMHO wird deine Zeichenlogik einfach nicht mehr aufgerufen.

Anbei nen Game-Beispiel: Space Invaders Example Game - LWJGL
 

Kr0e

Gesperrter Benutzer
Ich bin leider nicht mehr so fit in pure OpenGl. Das sind die ganzen fiesen Engines schuld...

Aber rein von der Logig her: Wenn es nach deinem Texture-Load-Aufruf nciht mehr läuft, dann kann es ja eigentlich nur noch eins sein: Deine Texture ist schwarz(warum auch immer) und verdeckt alles.

Vlt. das glMatrixMode(GL_MODELVIEW); bevor du glEnable(GL_BLEND) aufrufst. Aber ich rate hier grad wirklich rum, also keine Garantie...

Vlt. mal zum Testen das BLEND rauslassen. Ansonsten: Rufst du denn iwo auch glBindTexture auf ? Ohne die Texture zu binden, dürfte das Darstellen auch nciht funzen.

Oder das glViewport mal innnerhalb von:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
-> glViewPort....
glOrtho(0, width, height, 0, 1, - 1);

Vlt als generelle Lösung für so einen Fall: Versuch das einfacshte Szenario ans Laufen zu bekommen, also ohne blending usw. einfach simpel gerenderte Texturen.

Es können ja auch die Texture-Koordinaten nicht stimmen, die du mit glTexCoords beim rendern übergibst.

Könnet viele Ursachen haben.

Ich hoffe, dass vlt einer meiner total dahin-gewürfelten Ansätze dich weiterbringen ;)

Gruß,

Chris
 

tdc

Bekanntes Mitglied
An den ganzen OpenGL-Befehlen bei initOpenGL() kann es auch nicht liegen, da, auch wenn ich diese Befehle beim Menü komplett rausnehme, beim Spiel alles schwarz ist.

Naja, dann werde ich es wohl mal mit 2 Fenstern versuchen, auch wenn ich mir nicht sicher bin, ob das die beste Lösung ist.

Edit: Ja, mit der 2-Fenster-Lösung geht es.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
A Greenfoot.org ; Erstellung von Menü Spiele- und Multimedia-Programmierung 2
D [Softwarearchitektur] Browsergame, Menü Spiele- und Multimedia-Programmierung 2
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
B Deepmind Poker Bot für PokerStars konfigurieren? Spiele- und Multimedia-Programmierung 2
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
E Organisation für Game Spiele- und Multimedia-Programmierung 1
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
coolian ich brauche irgendeine gui lib für lwjgl2 Spiele- und Multimedia-Programmierung 51
krgewb Anderer Algorithmus für Bounding Box Spiele- und Multimedia-Programmierung 9
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
Freshy Bot für Discord Spiele- und Multimedia-Programmierung 61
R Ideen für die Backend-Entwicklung eines Games gesucht Spiele- und Multimedia-Programmierung 8
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
MiMa Metadaten für Multimedia Daten ermitteln Spiele- und Multimedia-Programmierung 4
G Übungsprogramm für Matheaufgaben Spiele- und Multimedia-Programmierung 1
F Algorithmus für bessere Kollisionsabfragen Spiele- und Multimedia-Programmierung 10
S Bilder Für Schachfiguren Spiele- und Multimedia-Programmierung 14
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
S GUI erstellen für Text Adventure Spiele- und Multimedia-Programmierung 4
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
R Vererbbarer GameLoop für Engine Spiele- und Multimedia-Programmierung 14
J Vektor für Gravitation erzeugen Spiele- und Multimedia-Programmierung 34
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
Z Minimax-Algorithmus für TicTacToe Spiele- und Multimedia-Programmierung 5
H KI für Spiele Spiele- und Multimedia-Programmierung 1
S Pssende Datenstruktur für ein Netz Spiele- und Multimedia-Programmierung 5
S MouseEvents für Sprites Spiele- und Multimedia-Programmierung 3
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
C Port umleiten: lesen und schreiben für MCServer-Client über Skype Spiele- und Multimedia-Programmierung 0
J Musik Bibliothek für GUI Spiele- und Multimedia-Programmierung 7
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
R Ratschlag für 2D-3D Engine für die Spieleentwicklung gesucht Spiele- und Multimedia-Programmierung 4
Androbin KI für Verfolgung im Raster Spiele- und Multimedia-Programmierung 2
A Bot für Browsergame Spiele- und Multimedia-Programmierung 2
H Tutorials für Fortgeschrittene 3D-Anwedungen Spiele- und Multimedia-Programmierung 2
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
N Animationen für ein 2D game Spiele- und Multimedia-Programmierung 6
S Aufbau für 2D Spiele Spiele- und Multimedia-Programmierung 7
L Client für ein Browsergame Spiele- und Multimedia-Programmierung 21
Devil0s Swing Elemente für Inventar? Spiele- und Multimedia-Programmierung 9
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
P Spielfeld für RPG Spiele- und Multimedia-Programmierung 15
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
S Algorithmus zur Ressourcesuche für die KI Spiele- und Multimedia-Programmierung 5
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
K Einfache Engine für einfaches 3D gesucht Spiele- und Multimedia-Programmierung 10
C KI für Skatspiel - Wie können die Computerspieler eigenständig handeln? Spiele- und Multimedia-Programmierung 10
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
Kenan89 Kleines Projekt für Java Spiele- und Multimedia-Programmierung 5
M Empfehlungen für ein 2D-Jump'n'run Spiele- und Multimedia-Programmierung 4
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
C Wo ist der MP3 Plugin für JMF? Spiele- und Multimedia-Programmierung 3
qwerqer Design Pattern gesucht für Spielregeln Spiele- und Multimedia-Programmierung 2
M Java als Programmiersprache für kommerzielle Spieleentwicklung? Spiele- und Multimedia-Programmierung 3
K Game Engine für selbstprogrammiertes Spiel Spiele- und Multimedia-Programmierung 27
Y Warum Thread für Spieleprogrammierung? Spiele- und Multimedia-Programmierung 27
A Music für Android game Spiele- und Multimedia-Programmierung 3
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
M Minecraft Suche Java Programmierer (für Minecraft) Spiele- und Multimedia-Programmierung 2
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
T Grundlagenwissen für den 3D Raum Spiele- und Multimedia-Programmierung 6
I getSubImage sorgt für starken Performanceeinbruch Spiele- und Multimedia-Programmierung 6
M technologie für video, webcam & co Spiele- und Multimedia-Programmierung 25
C Java für große Spiele geeignet ? Spiele- und Multimedia-Programmierung 101
D Libraryempfehlung für Effekte Spiele- und Multimedia-Programmierung 3
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
D Tabelle für Spiel Spiele- und Multimedia-Programmierung 3
N Grundlagen für ein Jump&Run Spiele- und Multimedia-Programmierung 3
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
J Suche 3D Programm für jMonkeyEngine Spiele- und Multimedia-Programmierung 5
W 3D-APIs für Java - Eine Übersicht Spiele- und Multimedia-Programmierung 8
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
S Game Client für kleine Competition Spiele- und Multimedia-Programmierung 3
F Programm für Bildbearbeitung gesucht: Skalieren und Speichern Spiele- und Multimedia-Programmierung 6
K Lösungsansätze für ein Spiel Spiele- und Multimedia-Programmierung 2
Plastagen Frameworls für Animationen und co Spiele- und Multimedia-Programmierung 3
aze Wie Transform3D für PosPathInterpolator bestimmen Spiele- und Multimedia-Programmierung 8
M Musik für Spiel wo downloaden? Spiele- und Multimedia-Programmierung 7
R Netzwerkstruktur für ein kleines Spiel Spiele- und Multimedia-Programmierung 8
O KI (künstliche Intelligenz) für Schachlogik Spiele- und Multimedia-Programmierung 4
J Brauche denkanstoß für kleines grafikframework Spiele- und Multimedia-Programmierung 3
A Countdown-Timer für Spiel Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben