JFrame problem

Wieso hast du denn Probleme mit Arrays? Woran happert es denn? Denn die Welt wird sicher nicht nur bei 60 Felder bleiben, wobei das irgendwie auch nicht passte bei dir. Für ein Spielfeld von 8x8 Felder bräuchte man schon 64 Felder, also das mit 60 passt irgendwie nicht so richtig. Und so wie ich den Code bislang verstanden habe, soll sich die Welt bewegen, damit es so aussieht, als ob der vermeindliche Held sich durch die Welt bewegen würde. Da wirst du mit so einem kleinen Spielfeld nicht klar kommen, die Welt wird wohl schon noch etwas größer werden müssen und du kannst da nicht für jedes einzelne Feld eine eigene Variable samt Methoden usw. erstellen. Das geht nicht ... Genau dafür gibt es Arrays und Collections. Wobei Arrays Grundlagen sind, die musst du beherschen, denn die gibt es überall und nicht ohne Grund und gehören zum kleinen Einmaleins eines Programmierers. Und Collections sind nix anderes, nur eben mit dynamischer Größer.
 
Du sagtest, dass du schon mal eine vollkommen funktionierende Version zusammengebastelt hast...
kannst du mir die mal schicken****?

LG
javaman
 
Ja Moment ... Ich habe gesagt, dass ich was Lauffähiges aus dem gebastelt hab, was du an Code gepostet hattest. Damit konnte ich mir ungefähr ausmalen, was du eigentlich vor hast. Mit dem hochgeladenen Projekt habe ich allerdings so noch nix gemacht und du wolltest das System ja auch erst einmal auf Arrays umstellen.

Wenn du schon so fragst, dann muss ja etwas schief gegangen sein. Woran happert es denn?
 
Ich hab jetzt alles mit arrays automatisiert(Link ist auch schon erneuert).
Doch ich kann den Ritter schon wieder nur zwischen 400 und 600 anzeigen lassen, manchmal zeigt es ihn auch gar nicht an...
Und das schönste noch dazu, den Hintergrund zeigt es auch nicht an.
Beides ist auf super.paintComponent
Die Arrays funktionieren einwandfrei, nur halt anzeigen tut es nichts.
Die funktionierende Version, die du aus dem zusammengebastelt hast würde mir auch schon reichen, vielleicht erkenne ich daran mein problem

LG
javaman
 
Ich habe mir mal die aktuelle Version runtergeladen und muss sagen, dass ich das Gefühl habe, dass du total überfordert bist mit der Aufgabe. Was ich auch nicht verstehe ist, warum du nicht das machst, was man dir sagt. Wir versuchen dir zu helfen und geben Tipps oder weisen dich auf Sachen hin, die so nicht funktionieren oder anders gemacht werden sollten und du ignorierst das einfach. Wie soll man da helfen?

Es wurde mehrmals gesagt, dass du nicht die paint-Methode überlagern (überschreiben) sollst, sondern die paintComponent-Methode.

Die Klasse Keys implementiert ebenfalls noch immer nicht das Interface KeyListener und kann daher auch nicht als solcher verwendet werden => dein Spielfeld bewegt sich nicht. Keys kann auch von KeyAdapter erben, damit ist das Interface KeyListener automatisch implementiert.

In der Klasse MyFrame rufst du zwei mal die Methode add() auf und fügst zuerst ein Level- und dann ein Guy-Object hinzu. JFrame nutzt als default-Einstellung das BorderLayout. Das BorderLayout ist in fünf Bereiche eingeteilt, CENTER, NORTH, EAST, SOUTH und WEST. Die Arbeitsweise von BorderLayout ist die, dass es auch wirklich nur genau eine Komponente pro Feld speichert, also insgesamt genau 5. Ruft man add() nur mit der Komponente auf (also ohne die Himmelsrichtung anzugeben), wird die Komponente automatisch im CENTER-Feld gesetzt. Durch den zweiten Aufruf wird also ein Guy-Objekt gesetzt und das Level-Objekt ist verloren. Das muss also anders gehandhabt werden, das wird so nicht funktionieren. Aber sogar wenn du das änderst, wirst du nicht viel zu Gesicht bekommen (außer NullPointerExceptions, davon dürfte es wohl jede Menge geben ...), da nirgendwo auch nur ansatzweise was richtig initialisiert wird. Nehmen wir mal die Klasse Level, die ja eine zentralte Rolle spielt. Es werden nirgendwo die Felder initialisiert. Die Methoden dafür existieren zwar, aber werden nicht aufgerufen und somit wird es auch nix zu sehen geben.

Apropos Felder ... Was ein Array ist und wie man es benutzt scheinst du noch nicht so ganz raus zu haben, aber immerhin, du hast es versucht ^^
Java:
int[] ints = new int[25];
Dieses Beispiel erzeugt ein Array mit genau 25 Feldern. Der Zugriff auf die einzlenen Felder findet durch die Indezes 0 - 24 statt. In deinem Code hast du die Arrays mit nur 59 Feldern erzeugt (sollten wohl 60 sein) und greifst auf die Felder 0-59 zu. Das sind insgesamt 60 Felder, auf die du zugreifen willst, so groß ist das Array aber nicht und es wird eine ArrayIndexOutOfBoundsException geworfen.
Aber ich würde das mit den Arrays ohnehin noch etwas anders handhaben. Du hast ein 2D-Spielfeld. Da macht es doch Sinn auch ein 2-dimensionales Array zu verwenden. Bei einem Spielfeld von 8x8 Felder (insgesamt 64 Felder) würde das dann so aussehen:
Java:
int[][] ints = new int[8][8];
Der Zugriff auf die Felder ist analog zum 1-dimensionalen Array.
 
Zuletzt bearbeitet:
wenn ich ein 2 dimensionales Array mache, wie mach ich dann dass?
Java:
for(int i=0; i<x.length; i++)
		{
		x[i]= x[i] + dx;
		}
 
Zuletzt bearbeitet von einem Moderator:
Dazu brauchst du zwei verschachtelte Schleifen:
Java:
for(int i = 0; i < x.length; i++) {
    for(int j = 0; j < x[i].length; j++) {
        x[i][j] += dx;
    }
}
Das würde ich aber auch nicht so machen. Damit du das gesamte Spielfeld verschieben kannst, läufst du jedes einzelne Feld ab und veränderst dessen Koordinate. Das ist aber eigentlich nicht sonderlich klug, wie ich finde, denn das frisst Rechenleistung. Da die Felder sowieso gezeichnet werden müssen, kann man der drawImage-Methode die neuen Koordinaten übergeben.
 
Zurück