Vererbbarer GameLoop für Engine

Roovy

Aktives Mitglied
Hallo,
ich habe bereits recherchiert aber ich kann mir einfach nicht helfen. Ich finde nichts spezifisches was auf mein Problem zutrifft und nicht einmal bei anderen Engines abzuschauen hat mir nicht geholfen zu einer Lösung zu kommen (die ich verstehe und so unterstütze).
Ich möchte eine Java-Datei (ich schätzte Interface?) für eine Engine erzeugen, die einige Methoden enthält. Bsp.: Update. Diese Methode soll dann via. extends in ein eigenes Programm eingefügt werden können. Dabei übergibt man beispielsweise noch die Updatefrequenz an Update und schreibt alles in diesen Update block, während der GameLoop in der Superklasse den Rest erledigt (in der Frequenz zu bleiben etc.).

Ich bin sehr verbunden für jegliche Hilfe. (Bitte versucht es zu erklären. Die Grundlagen freilich nicht.)
 

Java20134

Bekanntes Mitglied
Also an deiner Stelle würde ich eine Klasse machen, die abstract ist. Und dann kannst du auch die Vererbung (extends) anwenden. Aber Interfaces implementierst du mit dem Schlüsselwort implements.
Die Klasse könnte so aussehen:
Java:
public abstract class Figure {
 protected int x, y, width, height;

public Figure(int x, int y, int width, int height){
  this.x = x;
  this.y = y;
  this.width = width;
  this.height = height;
}

public Figure(int x, int y, int size){
  this(x, y, width, height);
}

 public abstract void update();
 public abstract void draw();
}
Denn Namen der Klasse kannst du noch ändern, da ich nicht genau weiß für was du die Klasse brauchst. Für Figuren würde ich die Klasse einfach "Figure" nennen oder für ein Spiel einfach "Game"?
 

Roovy

Aktives Mitglied
Okay. Danke.
Wie genau müsste ich denn jetzt update und draw in einer Schleife (Engine-intern, damit der User das nicht machen muss) aufrufen? (Nur kurzes Beispiel. Wie ich sinnvollen GameLoop hinkriege weiß ich.)
 

Bilal

Mitglied
Moin,
zu deiner letzten Frage:
Annahme: TestFigure ist eine Unterklasse von Figure, wobei die Methode draw bspw. einen Parameter vom Typ Graphics erwarten würde.:
Java:
public class TestFigure extends Figure{
protected int x, y, width, height;
protected Image image =  new Image(<"irgendein Bild">);


public Figure(int x, int y, int width, int height){
super(x,y,width,height);

}


public void update()
{
   //tun sie dinge
}
public void draw(Graphics g)
{
   g.draw(image,x,y)
}
}

In jedem Durchgang könnte der Aufruf in deiner App folgendermaßen aussehen:
Java:
// perform step
                if((float)deltaTime/1000000000f >= 0.01)
                {
                    engine.update();       
                }
In deiner Engine Klasse könnte es dann nach Java20134 folgendermaßen aussehen:
Java:
public class GameEngine{

//Attribute
private ArrayList<Figure> figures;
private Graphics g;
...
...
//Konstruktor
public GameEngine()
{
  //wichtiger Erstkram
  init();
  //nun, erzeuge deine gewollten Elemente
  figures = new ArrayList<Figure>();
  Figure fig1 = new TestFigure(0,0,10,20);
  figures.add(fig1);
}

/**
     * /** Updates the game
     *
     * @param deltaTime
     *            delta time
     **/
    public void update()
    {
        //hier bspw. eine update + draw nur für deine Figuren.
       for(Figure f: figures)      
         {   
              f.update();
              f.draw(g);
         }
    }

}

Bei Bedarf erzeugst du dir noch andere Elemente und delegierst deine Updates an diese.
Hoffe, konnte helfen.
LG Bilal
 
Zuletzt bearbeitet:

Roovy

Aktives Mitglied
Nun, ich verstehe den Ansatz aber er hilf mir immernoch nicht direkt weiter. Ich kann nicht auf die vererbte Methode zugreifen. Die Schleife soll ja engineintern sein, die Methoden draw/update vererbt, sodass der Endnutzer nur diese beiden hat.
Er startet bei mir mit der Erstellung eines JFrames (über eine Engine-Klasse, die es schneller macht mit weniger Befehlen ein JFrame aufzusetzen) und startet dann quasi den JFrame mit einer Methode, die den JFrame sichbar macht etc. An dieser Stelle möchte ich dann auch den GameLoop starten der dann erst init() aufruft, und dann immerwieder draw() und render(). Doch diese beiden sind ja in der vererbten Klasse, der Loop hingegen in der Parent-Klasse.
 

mrBrown

Super-Moderator
Mitarbeiter
Wer soll da von wem erben?

Generell kann man schon auf vererbte Methoden zugreifen, warum sollte das nicht gehen?
 

Roovy

Aktives Mitglied
Man eine Klasse, nennen wir sie Window, diese erstellt ein JFrame. Eine zweite Klasse, GameLogic, enthält die abstrakten Methoden init, update, draw und eine Funktion, die den GameLoop beinhaltet. Von dieser erbt der Nutzer.
Hat der nutzer nun ein neues Window erstellt und aufgesetzt und ruft die custom Methode start() auf, wird der JFrame initialisiert und gleichzeitig auf die start-Methode in GameLogic zugegriffen. Der Loop soll dann auf update und draw in der Tochterklasse(?) zugreifen.
 

mrBrown

Super-Moderator
Mitarbeiter
Das klappt problemlos, der Nutzer muss Window dann nur seine Instanz von GameLogic übergeben (wobei man da vllt noch über Trennung nach MVC nachdenken sollte).

In GameLogic kann man auch auf die als abstrakt deklarierten Methoden zugreifen, in der jeweiligen Instanz sind sie ja nicht mehr abstrakt.
 

Roovy

Aktives Mitglied
Also zum Beispiel so:
Code:
Window w = new Window()
//set-up
w.start(w)
?
Und GameLogic dann:
Code:
void startGameLogic(Window window) {
  w.init();
  while(true){ //kurz vereinfacht
    w.update();
    w.draw();
  }
}
?
 

mrBrown

Super-Moderator
Mitarbeiter
Warum sollte man dem window noch mal sich selbst übergeben?
GameLogic soll doch die Funktionen nicht auf dem Fenster, sondern auf sich selbst aufrufen?
 

mrBrown

Super-Moderator
Mitarbeiter
Funktionen auf sich selbst aufrufen?
Einfach die Funktion mit this aufrufen (oder die Referenz ganz weglassen)
 

Roovy

Aktives Mitglied
Nein nein. Ich meine die aus Engine vererbte Methode render() in der Methode startGameLogic() ind der Klasse Engine.
 

Sogomn

Bekanntes Mitglied
Ich hab' das in meiner Bibltiothek, die ich für Spiele benutze, so gelöst, dass man der "Screen"-Klasse Listener hinzufügen kann und der Aufruf von "draw" (oder "render" - wie auch immer) die gleichnamige Methode aller Listener aufruft. Die Listener werden durch ein Interface definiert.

Code:
final class Screen {

    //...

    void draw() {
        final Graphics2D g = createScreenGraphics();

        notifyListeners(listener -> {
            listener.draw(g);
        });
    }

}
Code:
interface Listener {

    void draw(final Graphics2D g);

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Damtonix Gameloop funktioniert nicht! Spiele- und Multimedia-Programmierung 6
N Gameloop tiles anzeigen Spiele- und Multimedia-Programmierung 3
U Tastatureingaben parallel zum Gameloop Spiele- und Multimedia-Programmierung 3
derMartin der richtige Gameloop? 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
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
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
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 2D Menü für 3D Spiel Spiele- und Multimedia-Programmierung 5
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
J Tips für ein kleines Pong-Applet Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben