LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac

TKPROG

Mitglied
Guten Tag an alle Entwickler!

In der letzten Woche habe ich ein großes Problem bekommen. Immer wenn ich mein Spiel aus eclipse auf meinem iMac (Mac OS X 10.7.3, 16 GB 1333 MHz DDR3, 3.1 GHz Intel Core i5, AMD Radeon HD 6970M 1024 MB, Mitte 2011) gestartet habe, hat das Spiel nicht richtig funktioniert. Ich habe ein Video von diesem Problem gemacht: Problem with LWJGL - YouTube

Seht ihr den Spielbildschirm? Er ist schwarz, aber er sollte aber wie das Bild im Anhang aussehen...

Nachdem ich das gesehen habe, habe ich eines meiner anderen Projekte, welche ich zuvor auch mit LWJGL gemacht habe, getestet und das hat funktioniert.
Dnach habe ich an einen meiner Freunde geschickt, welcher denselben iMac hat und dort hat es auch nicht funktioniert.

Dadurch denke ich, dass ich das Spiel falsch starte, aber auf meinem Netbook (DELL Latitude 2110, 2 GB RAM, 1,83 GHz Mono Intel Atom) funktioniert es jeden Tag.

Ich habe jeden Tag nach dem Fehler gegoogled, aber da waren nur Probleme über Minecraft und über andere Sachen, die ich nicht brauche.

Nun meine "Frage": Was soll ich machen? Was braucht ihr um mir zu helfen? Code, oder andere Informationen(Der Code umfasst bis zu 20 Dokumente mit je bis zu über 200 Zeilen)? Bitte helft mir!

Danke, dass ihr das lest und vielleicht sogar antwortet.

Euer TKPROG

PS.: Das Spiel wir kostenlos zum Download angeboten werden, doch zur Zeit ist es noch in der dev Phase ^^ MeusDorfus II
 

Anhänge

  • startupscreen.png
    startupscreen.png
    40,2 KB · Aufrufe: 32
Sind die Treiber den aktuell? Das ist eines der häufigsten Probleme warum aufm Mac was nicht läuft^^ Außerdem müsste LWJGL in solchen Fällen eigentlich Exceptions schmeißen.
 
Danke für die schnelle und nette Antwort 😀

Gut, ich habe gesehen, dass es da ein Update gibt, und ich werde es gleich installieren.

Und LWJGL wirft keine Exceptions:
Code:
Sun May 27 17:07:20 CEST 2012 INFO:Slick Build #229
Sun May 27 17:07:20 CEST 2012 INFO:LWJGL Version: 2.8.3
Sun May 27 17:07:20 CEST 2012 INFO:OriginalDisplayMode: 2560 x 1440 x 32 @0Hz
Sun May 27 17:07:20 CEST 2012 INFO:TargetDisplayMode: 640 x 480 x 0 @0Hz
Sun May 27 17:07:21 CEST 2012 INFO:Starting display 640x480
Sun May 27 17:07:21 CEST 2012 INFO:Use Java PNG Loader = true
Sun May 27 17:07:21 CEST 2012 INFO:Controllers not available
Sun May 27 17:07:21 CEST 2012 INFO:Initialising sounds..
Sun May 27 17:07:21 CEST 2012 INFO:- Sound works
Sun May 27 17:07:21 CEST 2012 INFO:- 64 OpenAL source available
Sun May 27 17:07:21 CEST 2012 INFO:- Sounds source generated

Könnte es vllt auch an der von mir benutzten 2D Java Game Library Slick liegen?

Sofern es hilfreich ist, meine main-Klasse:
Code:
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JOptionPane;

import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.Color;
import org.newdawn.slick.Font;
import org.newdawn.slick.Game;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.openal.Audio;
import org.newdawn.slick.openal.AudioLoader;


public class MeusDorfusIIv6 implements Game{
	public static Font font = null;
	public static GUI TheGUI;
//	public static Audio TheAudio1;
	public static GameContainer container;
	public static MeusDorfus CURRENT;
//	public static Audio TheAudio2;
	public static GUI_DIALOG dialog1 = null;
	public static DisplayMode fullscreen = null;
	public static DisplayMode nonfullscreen = null;
	public static boolean soundallowed = true;

	public MeusDorfusIIv6() {
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
			/*String[] languages = {"English", "Deutsch"};
			int result = JOptionPane.showOptionDialog(null, "Chose your language:", "Meus Dorfus II: Language...", 0, JOptionPane.QUESTION_MESSAGE, null, languages, languages[0]);
			if(result == JOptionPane.CLOSED_OPTION){
				JOptionPane.showMessageDialog(null, "The game is going to use English as the language.");
				Language.CURRENTLANGUAGE = Language.LANGUAGE_ENGLISH;
			}
			else{
				Language.CURRENTLANGUAGE = result;
			}
			*/
			MeusDorfusIIv6 m = new MeusDorfusIIv6();
			STARTUP.THIS = new STARTUP(m.new STARTUPOKActionListener());
			STARTUP.THIS.setVisible(true);
	}
	public class STARTUPOKActionListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			STARTUP.THIS.setVisible(false);
			MeusDorfusIIv6.soundallowed = STARTUP.THIS.checkbox1.isSelected();
			if(STARTUP.THIS.combobox1.getSelectedIndex() == 0){
				Language.CURRENTLANGUAGE = Language.LANGUAGE_ENGLISH;
			}
			else if(STARTUP.THIS.combobox1.getSelectedIndex() == 1){
				Language.CURRENTLANGUAGE = Language.LANGUAGE_GERMAN;
			}
			else{
				Language.CURRENTLANGUAGE = Language.LANGUAGE_ENGLISH;
			}
			/*if(System.getProperty("os.name").contains("Mac")){
				MeusDorfusIIv6.macosxtest();
				return;
			}*/
			try{
				AppGameContainer app = new AppGameContainer(new MeusDorfusIIv6(), 900, 500, false);
				DisplayMode[] modes = null;
				try {
					modes = Display.getAvailableDisplayModes();
				} catch (Exception e) {
					e.printStackTrace();
					modes =null;
				}
				if(modes != null){
					MeusDorfusIIv6.nonfullscreen = modes[STARTUP.THIS.combobox2.getSelectedIndex()+1];
					MeusDorfusIIv6.fullscreen = modes[STARTUP.THIS.combobox2.getSelectedIndex()+1];
					app.setDisplayMode(modes[STARTUP.THIS.combobox2.getSelectedIndex()+1].getWidth(), modes[STARTUP.THIS.combobox2.getSelectedIndex()+1].getHeight(), STARTUP.THIS.checkbox2.isSelected());
					app.start();
				}
				else{
					MeusDorfusIIv6.fullscreen = null;
					MeusDorfusIIv6.nonfullscreen = null;
					try {
						modes = Display.getAvailableDisplayModes();
						
						int b = 0;
						int c = 0;
						
						int d = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50);
						int e = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()-100);
						for(int a = 0;a < modes.length;a++){
							if(modes[a].getHeight() > c){
								if(modes[a].getWidth() < d && modes[a].getHeight() < e){
									c = modes[a].getHeight();
									b = a;
								}
							}
						}
						app.setDisplayMode(modes[b].getWidth(), modes[b].getHeight(), STARTUP.THIS.checkbox2.isSelected());
					} catch (LWJGLException e1) {
						e1.printStackTrace();
					}
				}
			}
			catch(Exception e){
				e.printStackTrace();
				Sys.alert("", "ERROR: " + e.getLocalizedMessage());
			}
		}
		
	}

	@Override
	public void init(GameContainer container) throws SlickException {
		try{
			container.setIcon(ImageLoader.icon);
//			File f = new File("snd/P002_Menue.wav");
//			MeusDorfusIIv6.TheAudio1 = AudioLoader.getAudio("WAV", new FileInputStream(f));
//			MeusDorfusIIv6.TheAudio2 = AudioLoader.getAudio("WAV", new FileInputStream(new File("snd/S005_Extreme_Chilling_loopable.wav")));
			MeusDorfusIIv6.initGUI(GUISplash.THIS);
			container.setMusicOn(soundallowed);
			container.setShowFPS(false);
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}

	@Override
	public void update(GameContainer container, int delta) throws SlickException {
		MeusDorfusIIv6.container = container;
		if(container.getInput().isKeyPressed(Input.KEY_F11)){
			if(container.isFullscreen()){
				if(MeusDorfusIIv6.nonfullscreen != null){
					AppGameContainer app = (AppGameContainer) container;
					app.setDisplayMode(MeusDorfusIIv6.nonfullscreen.getWidth(), MeusDorfusIIv6.nonfullscreen.getHeight(), false);
				}
				else{
					AppGameContainer app = (AppGameContainer) container;
					try {
						DisplayMode[] modes = Display.getAvailableDisplayModes();
						
						int b = 0;
						int c = 0;
						
						int d = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50);
						int e = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()-100);
						for(int a = 0;a < modes.length;a++){
							if(modes[a].getHeight() > c){
								if(modes[a].getWidth() < d && modes[a].getHeight() < e){
									c = modes[a].getHeight();
									b = a;
								}
							}
						}
						app.setDisplayMode(modes[b].getWidth(), modes[b].getHeight(), false);
					} catch (LWJGLException e1) {
						e1.printStackTrace();
					}
				}
			}
			else{
				if(MeusDorfusIIv6.fullscreen != null){
					AppGameContainer app = (AppGameContainer) container;
					app.setDisplayMode(MeusDorfusIIv6.fullscreen.getWidth(), MeusDorfusIIv6.fullscreen.getHeight(), true);
				}
				else{
					AppGameContainer app = (AppGameContainer) container;
					try {
						DisplayMode[] modes = Display.getAvailableDisplayModes();
						
						int b = 0;
						int c = 0;
						
						int d = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50);
						int e = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()-100);
						for(int a = 0;a < modes.length;a++){
							if(modes[a].getHeight() > c){
								if(modes[a].getWidth() < d && modes[a].getHeight() < e){
									c = modes[a].getHeight();
									b = a;
								}
							}
						}
						app.setDisplayMode(modes[b].getWidth(), modes[b].getHeight(), true);
					} catch (LWJGLException e1) {
						e1.printStackTrace();
					}
				}
			}
		}
		
		if(container.getInput().isKeyPressed(Input.KEY_F3)){
			if(container.isShowingFPS()){
				container.setShowFPS(false);
			}
			else{
				container.setShowFPS(true);
			}
		}
		if(MeusDorfusIIv6.TheGUI instanceof GUINormalHouseView || MeusDorfusIIv6.TheGUI instanceof GUIDorfuebersicht || MeusDorfusIIv6.TheGUI instanceof GUIOverview){
			if(MeusDorfusIIv6.CURRENT != null){
				MeusDorfusIIv6.CURRENT.update();
			}
		}
		if(MeusDorfusIIv6.dialog1 != null){
			MeusDorfusIIv6.dialog1.update(container, delta);
		}
		else{
			MeusDorfusIIv6.TheGUI.update(container, delta);
		}
	}

	@Override
	public void render(GameContainer container, Graphics g)
			throws SlickException {
		MeusDorfusIIv6.font = g.getFont();
		g.setColor(Color.black);
		if(MeusDorfusIIv6.dialog1 != null){
			MeusDorfusIIv6.dialog1.render(container, g);
		}
		else{
			try{
				MeusDorfusIIv6.TheGUI.render(container, g);
				}
				catch(Exception e){
					e.printStackTrace();
				}
		}
	}

	@Override
	public boolean closeRequested() {
		GUIDialog.THIS.realInit(Language.getString(Language.CloseRequestText), Language.getString(Language.CloseRequestTitle), new closeRequestDialogAnswer(), MeusDorfusIIv6.TheGUI, GUIDialog.OPTION_YES_NO);
		MeusDorfusIIv6.dialog1 = GUIDialog.THIS;
		return false;
	}
	
	public class closeRequestDialogAnswer implements DialogAnswer{

		@Override
		public void answer(int answer) {
			if(answer == GUIDialog.OPTION_YES){
				System.exit(0);
			}
		}
		
	}

	@Override
	public String getTitle() {
		return "Meus Dorfus II";
	}
	
	public static void cannotInit(){
		Sys.alert("", Language.getString(Language.CanntoInit));
	}
	public static void drawStackedBG1(GameContainer container, Graphics g){
		int widthOfBG = ImageLoader.getImage(ImageLoader.bg1).getWidth();
		int heightOfBG = ImageLoader.getImage(ImageLoader.bg1).getHeight();
		int tileWidth = 100;
		int tileHeight = 100;
		for(int a = 0;a < ((container.getWidth()/tileWidth)+1);a++){
			for(int b = 0;b < ((container.getHeight()/tileHeight)+1);b++){
				g.drawImage(ImageLoader.getImage(ImageLoader.bg1), 
						tileWidth*a, tileHeight*b, 
						(tileWidth*a)+tileWidth, (tileHeight*b)+tileHeight, 
						0,
						0,
						widthOfBG,
						heightOfBG
						);
			}
		}
	}
	public static void initGUI(GUI tHIS){
		MeusDorfusIIv6.TheGUI = tHIS;
		if(MeusDorfusIIv6.TheGUI.inited == false){
			try {
				MeusDorfusIIv6.TheGUI.init(MeusDorfusIIv6.container);
				MeusDorfusIIv6.TheGUI.inited = true;
			} catch (SlickException e) {
				e.printStackTrace();
				MeusDorfusIIv6.cannotInit();
			}
		}
	}
	
	public static void macosxtest(){
		try { 
			AppGameContainer app = new AppGameContainer(new MeusDorfusIIv6(), 900, 500, false);
			try {
				DisplayMode[] modes = Display.getAvailableDisplayModes();
				double width = (double)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
				double height = (double)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
				double width_height = width/height;
				for(int a = 0;a < modes.length;a++){
					try{
						double modes_a_width_height = (double)modes[a].getWidth()/(double)modes[a].getHeight();
						if(/*width_height == modes_a_width_height && */(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50)>modes[a].getWidth() && (Toolkit.getDefaultToolkit().getScreenSize().getHeight()-50)>modes[a].getHeight()){
							app.setDisplayMode(modes[a].getWidth(), modes[a].getHeight(), false);
							System.out.println("Das Programm bevorzugt den " + (a+1) + ". Modus, denn dort betr‰gt die Weite " + modes[a].getWidth() + " und die Hˆhe " + modes[a].getHeight());
							break;
						}
						if((a+1) == modes.length){
							System.out.println("Das Programm mag keinen der Modi...");
						}
					}
					catch(Exception e2){
					}
				}
			} catch (LWJGLException e1) {
				e1.printStackTrace();
			}
			app.start(); 
		} 
		catch (Exception e) { 
			e.printStackTrace();
			Sys.alert("ERROR:", e.getMessage());
			System.exit(-1);
		} 
		
	}
	
	/**
	 * Gibt den x-Wert wieder, den man braucht um zum Beispiel den ScheiflButton in die Mitte zu bekommen.
	 * M¸sste auch mit y-Wert und Hˆhe funken ^^
	 * @param bigwidth Z.B. container.getWidth()
	 * @param smallwidth z.B. button.getWidth()
	 * @return z.B. x vom Button, damit er in der mitte ist
	 */
	public static double getMiddel(float bigwidth, float smallwidth) {
		return (((double)bigwidth/(double)2)-((double)smallwidth/(double)2));
	}

}
 
Sun May 27 17:07:20 CEST 2012 INFO:OriginalDisplayMode: 2560 x 1440 x 32 @0Hz
Sun May 27 17:07:20 CEST 2012 INFO:TargetDisplayMode: 640 x 480 x 0 @0Hz
Habe hier zwar keinen Mac hier um es zu testen. Aber 0Hz Wiederholfrequenz erscheint mir seltsam. Auf den Windows/Linux Systemen sollte im Log eine Hz Zahl größer 0 stehen.

Es könnte sein, dass LWJGL die möglichen Bildwiederholfrequenzen des Monitors/der Grafikkarte nicht ermitteln kann.
Ansonsten probiere mal die DisplayTest Demo aus.
lwjgl.org - Home of the Lightweight Java Game Library

Die probiert die ersten 5 ermittelten DisplayModes aus und schmeißt dir entsprechende Infos.
Für SLICK wird es denke ich auch einen passenden Test geben bzw. der wird sich einfach selbst schreiben lassen.

Schließlich setzt SLICK auf LWJGL auf.
 
Ich habe nun folgendes Resultat bekommen, nachdem ich den Quellcode des Tests in eclipse mit lwjgl und den macosx-natives durchlaufen gelassen habe:

Code:
==== Test Current ====
Info about current:
Graphics card: null, version: null
Resolution: 2560x1440x32@0Hz
---- Test Current ----
==== Test query ====
Retrieving available displaymodes
Found 24 modes
The first 5 are:
1280 x 720 x 32 @0Hz
640 x 480 x 16 @0Hz
1600 x 900 x 16 @0Hz
1344 x 756 x 32 @0Hz
1280 x 1024 x 16 @0Hz
1680 x 1050 x 32 @0Hz
---- Test query ----
==== Test setDisplayMode ====
Retrieving available displaymodes
Looking for 640x480...found!
Changing to mode...done
Resolution: 640x480x16@0Hz
Resetting mode...done
---- Test setDisplayMode ----
==== Test setDisplayConfigurationTest ====
Testing normal setting
Configuration changed, gamma = 1.0 brightness = 0.0 contrast = 1.0
Testing gamma settings
Configuration changed, gamma = 5.0 brightness = 0.0 contrast = 1.0
Configuration changed, gamma = 0.5 brightness = 0.0 contrast = 1.0
Testing brightness settings
Configuration changed, gamma = 1.0 brightness = -1.0 contrast = 1.0
Configuration changed, gamma = 1.0 brightness = -0.5 contrast = 1.0
Configuration changed, gamma = 1.0 brightness = 0.5 contrast = 1.0
Configuration changed, gamma = 1.0 brightness = 1.0 contrast = 1.0
Testing contrast settings
Configuration changed, gamma = 1.0 brightness = 0.0 contrast = 0.0
Configuration changed, gamma = 1.0 brightness = 0.0 contrast = 0.5
Configuration changed, gamma = 1.0 brightness = 0.0 contrast = 10000.0
resetting...done
---- Test setDisplayConfigurationTest ----

Das Interessante ist, dass ein Spiel, welches ich früher angefangen habe, mit folgendem Modus funktioniert:
Code:
Using now 1280x720@0 Hz with 32 bits/pixel
Und ich nutze folgende Funktion um den "richtigen" Modus zu finden.
Java:
		try { 
			AppGameContainer app = new AppGameContainer(new WarOfPast1x(), 900, 500, false);
			try {
				DisplayMode[] modes = Display.getAvailableDisplayModes();
				double width = (double)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
				double height = (double)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
				double width_height = width/height;
				for(int a = 0;a < modes.length;a++){
					try{
						double modes_a_width_height = (double)modes[a].getWidth()/(double)modes[a].getHeight();
						if(/*width_height == modes_a_width_height && */(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50)>modes[a].getWidth() && (Toolkit.getDefaultToolkit().getScreenSize().getHeight()-50)>modes[a].getHeight()){
							app.setDisplayMode(modes[a].getWidth(), modes[a].getHeight(), false);
							System.out.println("Das Programm bevorzugt den " + (a+1) + ". Modus, denn dort betr‰gt die Weite " + modes[a].getWidth() + " und die Hˆhe " + modes[a].getHeight());
							System.out.println("Using now " + modes[a].getWidth() + "x" + modes[a].getHeight() + "@" + modes[a].getFrequency() + " Hz with " + modes[a].getBitsPerPixel() + " bits/pixel");
							break;
						}
						if((a+1) == modes.length){
							System.out.println("Das Programm mag keinen der Modi...");
						}
					}
					catch(Exception e2){
					}
				}
			} catch (LWJGLException e1) {
				e1.printStackTrace();
			}
			app.start(); 
		} 
		catch (Exception e) { 
			e.printStackTrace();
			Sys.alert("ERROR:", e.getMessage());
			System.exit(-1);
		}
Das finde ich ziemlich verwirrend...

(Wartet mal kurz ;D Ich teste nämlich alles gerade WÄHREND ich diesen Beitrag schreibe)

HEY ES FUNKTIONIERT 😀

Ich habe die Funktion in mein derzeitiges Spiel implementiert und es klappt ^^

(main Methode)
Java:
	/**
	 * @param args
	 */
	public static void main(String[] args) {
			if(System.getProperty("os.name").contains("Mac")){
				MeusDorfusIIv6.macstartup();
			}
			else{
				MeusDorfusIIv6 m = new MeusDorfusIIv6();
				STARTUP.THIS = new STARTUP(m.new STARTUPOKActionListener());
				STARTUP.THIS.setVisible(true);
			}
	}
die macstartup Methode:
Java:
	public static void macstartup(){
		try { 
			AppGameContainer app = new AppGameContainer(new MeusDorfusIIv6(), 900, 500, false);
			try {
				DisplayMode[] modes = Display.getAvailableDisplayModes();
				double width = (double)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
				double height = (double)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
				double width_height = width/height;
				for(int a = 0;a < modes.length;a++){
					try{
						double modes_a_width_height = (double)modes[a].getWidth()/(double)modes[a].getHeight();
						if(/*width_height == modes_a_width_height && */(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-50)>modes[a].getWidth() && (Toolkit.getDefaultToolkit().getScreenSize().getHeight()-50)>modes[a].getHeight()){
							app.setDisplayMode(modes[a].getWidth(), modes[a].getHeight(), false);
							System.out.println("Das Programm bevorzugt den " + (a+1) + ". Modus, denn dort betr‰gt die Weite " + modes[a].getWidth() + " und die Hˆhe " + modes[a].getHeight());
							System.out.println("Using now " + modes[a].getWidth() + "x" + modes[a].getHeight() + "@" + modes[a].getFrequency() + " Hz with " + modes[a].getBitsPerPixel() + " bits/pixel");
							break;
						}
						if((a+1) == modes.length){
							System.out.println("Das Programm mag keinen der Modi...");
						}
					}
					catch(Exception e2){
					}
				}
			} catch (LWJGLException e1) {
				e1.printStackTrace();
			}
			app.start(); 
		} 
		catch (Exception e) { 
			e.printStackTrace();
			Sys.alert("ERROR:", e.getMessage());
			System.exit(-1);
		} 
	}

Jetzt bin ich vorerst glücklich, aber dennoch wäre es interessant zu wissen, weshalb es bisher mit der andere Methode nicht ging.
Denn ich würde gerne meinen "Start-Manager" nutzen...

Vielen Dank für euer Interesse :toll:

PS.: Wisst ihr vllt weswegen das Fehler geschmissen hat?
 
Hat denn mit dem durchlaufen der Tests irgendein DisplayMode funktioniert oder sind die alle failed? Könnte sonst ja sein, dass der Mac das init mit der Desktop Auflösung schafft und dann erst die Auflösung wechseln kann...Mac...mehr als ausprobieren wird da schätze ich nicht drin sein.

Toolkit ist das Toolkit aus AWT oder?
 
Soweit ich es bemerkt habe, hat jeder DisplayMode funktioniert ;D.
Es lag ja, wie ich bereits vorher geschrieben hatte irgendwie am Projekt...
Nun nutze ich eine von mir vorher genutzte Intialisierung und sie klappt wenigstens.

Und ja, das Toolkit ist aus AWT. ;D
Java:
import java.awt.Toolkit;

PS.: Danke, dass Ihr so ein Interesse an meinem Problem zeigt. ^^ Ich habe das nämlich auch in dem englischsprachigen LWJGL-Forum gepostet und habe noch keine Antwort erhalten. Zumindest nicht als E-Mail... ;D
 
Hab mal in die SLICK Doku geschaut...an sich ist das Problem echt simpel...

AppGameContainer erwartet ja dein Game, die Fenster Größe und ob es Vollbild ist.
Du hast oben 900x500 als Fenstergröße eingegeben. Das funktioniert afaik in LWJGL nicht sondern nur die von DisplayMode zurückgelieferten Werte. Für solch komischen Bildverhältnisse kann man das Canvas nutzen.

Wie soll man 900x500 auf ner 800*600 Auflösung nutzen oder nem kleinen Laptop? ^^
 
Ok, ich werde das mal ändern ;D
Aber eigentlich mache ich ja hier die Änderung in einen der zur Verfügung stehenden DisplayModi...
[JAVA=12] app.setDisplayMode(modes[a].getWidth(), modes[a].getHeight(), false);[/code]

Trotzdem vielen Dank
Code:
:D
 
Funktioniert nicht 😉

Code:
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoSuchMethodError: org.lwjgl.LWJGLUtil.log(Ljava/lang/String;)V
        at org.newdawn.slick.openal.WaveData.create(WaveData.java:126)
        at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713)
        at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683)
        at org.newdawn.slick.openal.AudioLoader.getAudio(AudioLoader.java:54)
        at SoundLoader.play(SoundLoader.java:30)
        at GUISplash.init(GUISplash.java:37)
        at MeusDorfusIIv6.initGUI(MeusDorfusIIv6.java:297)
        at MeusDorfusIIv6.init(MeusDorfusIIv6.java:135)
        at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
        at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
        at MeusDorfusIIv6.macstartup(MeusDorfusIIv6.java:353)
        at MeusDorfusIIv6.main(MeusDorfusIIv6.java:46)
        ... 5 more
 
Ich werde es nacher gleich nocheinmal downloaden und auf all meinen Computern testen.

Aber welches System hast du denn?
Weil auf Mac OS X und (vielleicht (noch nicht wirklich getestet)) auf Windows ging es bei mir.
 
Kann sein, dass du dein Spiel auf Widescreen-Modis patchen musst? 640*480 ist ein 4:3 Modus.
 
Hmm, ich habe gerade eben das Spiel auf meinem iMac, meinem Parallelsdesktop Windows 7 und dem Windows Vista meiner Eltern getestet und es hat immer funktioniert, wenn man die jar einfach so geöffnet hat, aber als ich dann in der Konsole folgendes genutzt habe, hat es nicht funktioniertt und es ist genau die Fehlermeldung aufgetreten, welche du hier gepostet hast.

Code:
java -jar ...\MeusDorfusIIv6_dev_1.jar
(Die ... stehen für den restlichen Pfad)

Und wenn ich nun lwjgl hinzufügen wollte (und die anderen jars) wo sollte ich das dann hineinkopieren? In die jar oder wie die natives nebendran?

Und noch etwas: Das Spiel hat, wie ich gerade bemerkt habe, so oder so einen Bug, weswegen man sich nur im Hauptmenü aufhalten kann und sobald man ein neues Spiel machen will, die Buttons nicht angezeigt werden...

PS.: Nochmals vieen Dank für Dein/Euer Interesse. ^^
 
Doppelklick aufs JAR hat bei mir auch nicht funktioniert. Das hatte ich als erstes probiert.
Da ging nur das Fenster auf und hat sich wieder geschlossen.

Hab hier ein Dual Monitor System - das sollte aber kein Problem darstellen.
 
Ich muss jetzt leider zugeben, dass ich das nicht verstehe. ;D Heißt das, dass das Spiel auf einem 16:9 Monitor nicht laufen kann? Also auf meinem iMac mit 16:9 läuft es problemlos auch im Vollbildmodus (F11).
Im Prinzip heisst das, dass bei den in Frage kommenden Geräten nur Widescreen-Modi unterstützt werden, solange nur ein einzelner Widescreen-Monitor dranhängt. Ist aber glaub' ich nur 'ne Einstellungs- bzw. Treibersache, in Windows jedenfalls.
 
Hi,

bin über den Thread gestolpert und wollte es auch mal testen. Hier meine Fehlermeldung

Code:
Hi1
Sat Jun 09 13:35:50 CEST 2012 INFO:Slick Build #229
Das Programm bevorzugt den 13. Modus, denn dort betrëgt die Weite 1280 und die
êhe 800
Using now 1280x800@75 Hz with 16 bits/pixel
Sat Jun 09 13:35:50 CEST 2012 INFO:LWJGL Version: 2.8.3
Sat Jun 09 13:35:50 CEST 2012 INFO:OriginalDisplayMode: 1680 x 1050 x 32 @60Hz
Sat Jun 09 13:35:50 CEST 2012 INFO:TargetDisplayMode: 1280 x 800 x 0 @0Hz
Sat Jun 09 13:35:51 CEST 2012 INFO:Starting display 1280x800
Sat Jun 09 13:35:51 CEST 2012 INFO:Use Java PNG Loader = true
Sat Jun 09 13:35:51 CEST 2012 INFO:Controllers not available
Sat Jun 09 13:35:51 CEST 2012 INFO:Initialising sounds..
Sat Jun 09 13:35:51 CEST 2012 INFO:- Sound works
Sat Jun 09 13:35:51 CEST 2012 INFO:- 64 OpenAL source available
Sat Jun 09 13:35:51 CEST 2012 INFO:- Sounds source generated
AL lib: FreeContext: (00000000024653A0) Deleting 64 Source(s)
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLo
der.java:58)
Caused by: java.lang.NoSuchMethodError: org.lwjgl.LWJGLUtil.log(Ljava/lang/Stri
g;)V
        at org.newdawn.slick.openal.WaveData.create(WaveData.java:126)
        at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:713)
        at org.newdawn.slick.openal.SoundStore.getWAV(SoundStore.java:683)
        at org.newdawn.slick.openal.AudioLoader.getAudio(AudioLoader.java:54)
        at SoundLoader.play(SoundLoader.java:30)
        at GUISplash.init(GUISplash.java:37)
        at MeusDorfusIIv6.initGUI(MeusDorfusIIv6.java:297)
        at MeusDorfusIIv6.init(MeusDorfusIIv6.java:135)
        at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
        at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
        at MeusDorfusIIv6.macstartup(MeusDorfusIIv6.java:353)
        at MeusDorfusIIv6.main(MeusDorfusIIv6.java:46)
        ... 5 more

Ich hoffe, es hilft dir weiter 🙂

Habe nur einen Monitor.
 
Selbe Fehlermeldung hier. Ich frage mich dabei, warum man ein Eclipse-Paket in sein Spiel einbaut. Bevor man so etwas macht, muss man sich darüber klar sein, ob dieses keine weiteren Abhängigkeiten innerhalb von Eclipse hat. Besser man implementiert solche Funktionalitäten selber.
Ach ja...
Getestet auf Windows7 64 Bit Ultimate (Dual Head) und Windows XP Pro SP3 (Single Head).
 

Zurück
Oben