Objektorientierung?

coco07

Bekanntes Mitglied
Hey Community,
ich programmiere nun schon etwas länger in Java und weiß noch nicht recht, wie die Aufteilung von beispielweise GUI und dem eigentlichen Programm läuft.
Ich programmiere im Moment eine Art Spiel für Android und habe dort eine Screen Klasse, wo die SurfaceView angelegt ist. Für das Spiel habe ich eine GameWorld Klasse geschrieben, welche als Objekt in der Screen Klasse vorhanden ist um Methoden wie render() und draw() nur einmal aus der GameWorld aufrufen zu müssen und nicht für jeden Gegenstand z.B Steine, Straße und Autos einzeln aufrufen zu müssen.
In der GameWorld Klasse sind dann einzelne Objekte von den Spielgegenständen im Spiel, in meinem Fall Autos vorhanden. Nun muss ich die Benutzereingaben wie z.B onTouch() aber in der Screen Klasse verarbeiten und habe nun den Umstand, dass ich irgendwie an die Autos kommen muss. Also habe ich in der GameWorld Klasse einen getter für die Autos erstellt, was ziemlich umständlich und verwirrend ist.
Sollte ich vielleicht alle Objekte in der Screen Klasse, wo auch die Benutzereingaben vorhanden sind erzeugen und dann der GameWorld Klasse übergeben oder wie mache ich das am besten?

Dann hätte ich noch eine Frage bezüglich der Grafiken im Spiel. Im Moment habe ich in der Auto Klasse selber die Grafiken als Objekte angelegt und biete die Methode draw() an, welche nur aufgerufen werden muss, um alles andere wie spawnen und löschen der Objekte kümmert sich die Auto Klasse. Das Problem was ich habe ist, dass ich das Spiel an die Grafiken anpasse, also z.B für jedes Auto X und Y Koordinaten verwenden muss. Werden die Grafiken getauscht, müssen auch viele Variablen in der Auto Klasse geändert werden. Das entspricht aber nicht der üblichen Trennung von Grafik und Engine, wie es im Internet überall steht.

Wie soll ich bei einem Spiel vorgehen?
Wäre sehr dankbar, wenn mir jemand diese Fragen beantworten könnte :)

grüße coco07!
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Den Klick solltest du mit sog. EventListenern machen. Google mal danach.

Was ich bis jetzt mitbekommen habe, ist, dass die x und y Koordinaten die Ecke oben links der Figur (Bitmap) beschreiben. Sowas wie Kollisionen müsstest du natürlich anpassen. Aber nur so weit, dass die Autoklassen entweder schon eine kompatible Kollision haben, oder diese in eine engineweit kompatible Kollision "übersetzen", wenn du verstehst, was ich meine ;) .
 

coco07

Bekanntes Mitglied
Hey Gucky,

aufgrund diesem:
ich programmiere nun schon etwas länger in Java und weiß noch nicht recht, wie die Aufteilung von beispielweise GUI und dem eigentlichen Programm läuft.

Habe ich dieses bereits ausgelassen:
Den Klick solltest du mit sog. EventListenern machen. Google mal danach.

:oops:

Die X/Y Koordinaten beschreiben in meinem Programm die untere linke Ecke des Sprites. Um die Kollision gehts ja gar nicht. Ich weiß nur nicht bis wohin die Spiellogik gehen soll und ab wann der restliche Part zum Grafikpart gehört.
Ich habe beispielsweise diese Klasse:
Java:
public class Auto {
private Sprite mSpriteAuto;
private float posX, posY;
public Auto(){
this.mSpriteAuto = new Sprite(blabla); // Ist das initialisieren hier ok oder sollte ich das der Klasse übergeben?
}
public void male(){
if(mSpriteAuto.x < 10){
this.mSpriteAuto.draw(10, 0); // Gehört das zur Spiellogik?
}
}
}

Ich habe hier das Problem dass ich das Spiel zu sehr an die Grafiken anpasse... In großen Firmen läuft das sicherlich anders weil Grafiker und Programmierer ja möglichst unabhängig voneinander seine sollten und nicht die Fertigstellung der Grafiken eine Vorraussetzung für den Programmierer sind.
Das zweite Problem war ja, dass ich z.B folgenden Code in der Klasse Auto habe:
Java:
public void fahre(){
this.posX++;
}

Jetzt lege ich dieses Auto in der GameWorld Klasse an. In der SurfaceView Klasse wo auch der "Listener" angelegt ist, muss ich dann:
Java:
mGameWorld.getAuto().fahre();
aufrufen was etwas umständlich ist. Wie lässt sich das besser handhaben?

Hoffe du hast mein Problem nun besser verstanden :)

grüße coco07
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Wie meinst du das mit "ausgelassen"? Das wäre nämlich der Weg, der mir schon oft begegnet ist und alles voneinander unabhängig belässt.


In gewisser Weis müssen Programmierer und Grafiker schon zusammen arbeiten.
Ich würde spontan diesen Weg vorschlagen: du machst eine Klasse Auto, die alles kann, was dein Auto können soll.
Dann lässt du diese Klasse sich an das dazugehörige Sprite anpassen. Vielleicht gibst du noch einen Detailgrad mit. Die Klasse ist also flexibel und kann sich "intelligent" an das Sprite anpassen.
 

Bananabert

Bekanntes Mitglied
Moin moin,

zu den Grafiken :

Du könntest dir einen Texture Loader erstellen, welcher deine ganzen Sprites lädt und zum bsp. in eine HashMap speichert mit einen String als key.
Deine Auto-Klasse müsste dann die Keys natürlich kennen. Diese könnte dann entweder ein Interface
Java:
public Interface Movable {
	public String getSpriteKey(/* parameters ... */);
	public Point getCoordinates(/* parameters ... */);
}
oder eine Base-Klasse extenden welche 2 Methoden bereit stellt.
Java:
public abstract class BaseObject {
	public abstract String getSpriteKey(/* parameters ... */);
	public Point getCoordinates(/* parameters ... */);
}
Zu guter Letzt eine Render-Helper Klasse, welche Zugriff auf alle Objekte sowie den Texture-Loader/Texture-Handler hat, über alle deine Objekte der Welt schleifen und diese mit den 2 Methoden zeichnen.

Zu der Logik :

Hier würde auch wieder entweder die Base-Klasse erweitern um eine Methode
Java:
public void doLogic(/* parameters ... */){}
Kann natürlich auch einen anderen Namen haben. Oder du erstellt ein weiteres Interface dafür.
Hier kannst du dann auch wieder einfach über alle Objekte schleifen und die doLogic Methode aufrufen.

Hoffe ich habe dein Problem richtig verstanden und es hilft dir ein wenig.
 

coco07

Bekanntes Mitglied
Bananabert@ Das war die richtige Richtung :) Die Interfaces sind mir ganz abhanden gekommen. Durch deinen code bin ich jetzt etwas auf die richtige Spur gerückt, vielen Dank ^^

grüße Coco07!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
L Einführung Objektorientierung Java Basics - Anfänger-Themen 8
L Einstieg Objektorientierung Java Basics - Anfänger-Themen 10
H Wie geht eigentlich Objektorientierung? Java Basics - Anfänger-Themen 14
L Objektorientierung Java Basics - Anfänger-Themen 6
B Objektorientierung Java Basics - Anfänger-Themen 1
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
T Objektorientierung-Kurze Frage Java Basics - Anfänger-Themen 5
L Hilfe! Objektorientierung Java Basics - Anfänger-Themen 3
S OOP Zusammenhang von Objektorientierung und Ausnahmebehandlungen Java Basics - Anfänger-Themen 6
G Designfrage/Objektorientierung Java Basics - Anfänger-Themen 19
S Methoden Aufgabe zu ""Methoden" und "Objektorientierung" Java Basics - Anfänger-Themen 3
B OOP Programm zur Verdeutlichung von Objektorientierung Java Basics - Anfänger-Themen 7
T Initialisierungen der einzelnen Klassen - Objektorientierung Java Basics - Anfänger-Themen 4
B Objektorientierung Java Basics - Anfänger-Themen 2
W Einstieg Objektorientierung Java Basics - Anfänger-Themen 4
X Objektorientierung Einführung Java Basics - Anfänger-Themen 2
A Objektorientierung Klassen Java Basics - Anfänger-Themen 4
D Objektorientierung / Polymorphismus Java Basics - Anfänger-Themen 8
Spin Objektorientierung . Konzept Java Basics - Anfänger-Themen 4
M Objektorientierung Java Basics - Anfänger-Themen 3
M Objektorientierung - wie macht man's richtig? Java Basics - Anfänger-Themen 3
R ObjektOrientierung Java Basics - Anfänger-Themen 18
D Objektorientierung ? Java Basics - Anfänger-Themen 4
D Objektorientierung Listen Java Basics - Anfänger-Themen 2
J objektorientierung und uml Java Basics - Anfänger-Themen 5
D Objektorientierung - wie konsequent sollte man sein ? Java Basics - Anfänger-Themen 30
D Zuerst Objektorientierung oder GUI ? Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben