2D-Engine. Brauche einen Denkanstoß



  • also ich hab mir eben noch mal ein paar gedanken dazu gemacht.

    struct phys_objects {
      float pos_x; // x pos
      float pos_y; // y pos
      float width_x;
      float width_y;
      int type; // typ des objektes;
      int health; // wenn null unzerstörbar
      float weight; //gewicht
    };
    class meine_engine {
      private:
        float gravity = 9.81f;
        int size_x, size_y, phys_count;
        bool fps = false; // werden fps angezeigt oder nicht
        char *show_mode; // welcher modus ist aktiv
        int map[size_x][size_y]; // hier wird die Karte gespeichert
        array phys_objects[phys_count]; // da weiß ich noch ned wie ich das in einem array speichern muss... bin grade etwas ideenlos
        bool loadmap(char *filename); // laden der map
        float vect_speed[to_x][to_y]; // geschwindigkeit der objekte. wie ich das genau jetzt festleg muss ich auch noch überlegen
    
      public:
        void render();
        meine_engine();
        ~meine_engine( free_all() );
        free_all(); //Löscht alle objekte, text, die karte usw
        void text_out(int x, int y, char *text);
        void collide();
        void draw_player();
        bool show_menu(char *menuname); // läd menu aus einer datei ähnich wie .res
        int redermode(char *mode); // umschaltunge zwischen show modi sprich menu oder ingame
        void show(char *what); // schaltet sachen auf den bildschirm wie zb Scoreboard
    };
    

    hab ich irgendwas sehr wichtiges vergessen?
    alos das sidn nur überlegungen. da ins nix ausgereift. bin offen für kretik



  • Was soll denn das für eine Engine werden? Ein Grafikengine? Dann hat darin Logik wie Bewegungen, Physik und Kollisionen nichts verloren.



  • FlameDiver schrieb:

    Lohnt es sich überhaubt für ein 2D-Spiel eine enging zu schreiben?

    Kommt immer darauf an, wie gross das Projekt werden soll und wieviel Spass du haben willst. 😃

    FlameDiver schrieb:

    Was für Funktionen brauche ich?

    Ein typischer Game-Loop besteht aus drei Teilen:
    Input
    Logik
    Render (Output)

    Dementsprechend solltest du dir die Funktionalität herleiten.
    Was brauch ich für Input? Tastatur und Maus? Wie ist es mit Gamepad oder Joystick? Brauch ich für den Render nur Grafik oder auch Sound? Usw.

    FlameDiver schrieb:

    OpenGl oder DirextX da sind wir uns noch ned sicher. ich bin für OpenGL weil meines wissen nach umfangreicher.

    Da täuschst du dich. Es ist gerade andersrum. Aber du vergleichst hier auch Äpfel mit Birnen. DirectX ist 'ne komplette Multimedia API, also Grafik, Sound, Netzwerk, etc. OpenGL lediglich Grafik. Der direkte Vergleich wäre also DirectX Graphics und OpenGL. Die nehmen sich vermutlich nichts in Funktionalität.



  • Nur mal so meine Gedanken dazu:
    Ich würde die engne splitten. Einen lowlevelteil (der nicht mal objektorientiert sein brauch)
    -3 Eben: vordergrund,hintergrund,akteure
    -Alles basiert auf tiles: tiles sind kleine quadrate mit vorgegeben inhalt (ein bildchen)
    -du sorgst also dafür das eine funktion

    render(tile tiles[3][X_SIZE][Y_SIZE])
    

    alles korrekt darstellt
    Dann hast du einen highlevel teil:
    -ein sigleton das ein tiles array hält
    -eine klasse objekt, die die tiles wrapt, nicht instanzierbar
    -davon abgeleitet statisches_objekt, dass zusätzlich noch ein bool hat um zwischen vg/hg zu unterscheiden
    -ebenfalls von objekt abgeleitet:
    passiv_dynamisch_obj <- aktiv_dynamisch_obj <- spieler
    -davon abgeleitet
    -mvc:
    m=objekt
    v=eine klasse, die das tiles singleton verändert
    c=je nachdem, wie dynamische das ganze sein soll, sowas wie statisch (vg+hg), passiv_dynamisch (mauern), aktiv_dynamisch (gegner), spieler; die controller sind jeweils von einander abgeleitet und nehmen das passende _obj entgegen
    -du packst jeweils m+v+c in eine polymorphe klasse
    -dann wrapst du noch den input
    -und schreibst eine klasse, die alles zusammenführt
    Das ist so ganz grob, wie ich es machen würde.



  • ness schrieb:

    Nur mal so meine Gedanken dazu:
    Ich würde die engne splitten. Einen lowlevelteil (der nicht mal objektorientiert sein brauch)
    -3 Eben: vordergrund,hintergrund,akteure

    Ich geh mal davon aus das Vordergund eingabe und hintergrund verarbeitung ist. aber was ist Akteure?

    -Alles basiert auf tiles: tiles sind kleine quadrate mit vorgegeben inhalt (ein bildchen)

    kenn ich 😉

    -du sorgst also dafür das eine funktion

    render(tile tiles[3][X_SIZE][Y_SIZE])
    

    alles korrekt darstellt

    sprich die map aus den tiles generiert.

    Dann hast du einen highlevel teil:
    -ein singleton das ein tiles array hält

    was ist ein singelton?

    -eine klasse objekt, die die tiles wrapt, nicht instanzierbar

    was ist wrapen?

    -davon abgeleitet statisches_objekt, dass zusätzlich noch ein bool hat um zwischen vg/hg zu unterscheiden

    was ist vg und was hg?

    -ebenfalls von objekt abgeleitet:
    passiv_dynamisch_obj <- aktiv_dynamisch_obj <- spieler

    fallen physikalische objekte auch unter aktive_dynamisch_obj?

    -davon abgeleitet
    -mvc:
    m=objekt
    v=eine klasse, die das tiles singleton verändert
    c=je nachdem, wie dynamische das ganze sein soll, sowas wie statisch (vg+hg), passiv_dynamisch (mauern), aktiv_dynamisch (gegner), spieler; die controller sind jeweils von einander abgeleitet und nehmen das passende _obj entgegen
    -du packst jeweils m+v+c in eine polymorphe klasse
    -dann wrapst du noch den input
    -und schreibst eine klasse, die alles zusammenführt
    Das ist so ganz grob, wie ich es machen würde.

    was ist ploymorph? ach mom ich guck nach.
    ich hätte noch ne idee wie man das mit der map machen kann. baue die map über tiles auf (also im leveleditor. dann wird die nach dem prinzip:
    0,0,0,0,0,0;
    0,1,1,1,1,0;
    0,1,0,0,1,0;
    0,1,0,0,1,0;
    0,1,1,1,1,0;
    0,0,0,0,0,0;

    gespeichert. dann wird daraus ein bild generiert udn das den als map genommen.
    wer sich jetzt fragt: wieso so? nunja das ist einfach. ich hatte vor das man die map mit den waffen sagen wir mal "verändern" kann 😃 . ich nehm mit einfach ne transparanzfarbe und immer da wo ne kugel aufschlägt wird dann sozusagen ein teil der map gelöscht. und kollisiopns abfrage mach ich den über pixel.

    sorry wegen dem vergelich OpenGl und DX ist mit im nachhinein auch eingefallen dsa DX ja noch sound und alles hat 🙂
    aber wie sieht das effectmäßig aus? gibt es in DX zb bumbmapping?
    weil ich ahtte mir überlegt das auch die spielfiguren zu packen damit die plastischer aussehen. war aber auch nur sonne idee.

    aber danke schonmla für die viele hilfe. auch wenn ich viele fragen hab



  • ja, in dx gibt es bumpmapping...^^



  • wuderbar 😃
    ist auch zum glück nicht übertreiben für ein 2d spiel... 🤡



  • FlameDiver schrieb:

    ness schrieb:

    Nur mal so meine Gedanken dazu:
    Ich würde die engne splitten. Einen lowlevelteil (der nicht mal objektorientiert sein brauch)
    -3 Eben: vordergrund,hintergrund,akteure

    Ich geh mal davon aus das Vordergund eingabe und hintergrund verarbeitung ist. aber was ist Akteure?

    Nein. Es geht hier um die grafikausgabe im lowlevelteil, die 3 ebenen hat: den hintergrund, davor die akteure, davor den vordergrund

    FlameDiver schrieb:

    -Alles basiert auf tiles: tiles sind kleine quadrate mit vorgegeben inhalt (ein bildchen)

    kenn ich 😉

    -du sorgst also dafür das eine funktion

    render(tile tiles[3][X_SIZE][Y_SIZE])
    

    alles korrekt darstellt

    sprich die map aus den tiles generiert.

    Nein, sondern diesen vektor aus vektoren von tiles korrekt darstellt. sprich tiles[0] ist der hintergrund, tiles[1] die Akteure und tiles[2] der vordergrund

    FlameDiver schrieb:

    Dann hast du einen highlevel teil:
    -ein singleton das ein tiles array hält

    was ist ein singelton?

    Sigleton ist ein entwurfsmuster, danach kannst du suchen

    FlameDiver schrieb:

    -eine klasse objekt, die die tiles wrapt, nicht instanzierbar

    was ist wrapen?

    Umhüllen. Soll heißen, du machst eine klasse objekt, die einen haufen tiles + deren position verwaltet

    FlameDiver schrieb:

    -davon abgeleitet statisches_objekt, dass zusätzlich noch ein bool hat um zwischen vg/hg zu unterscheiden

    was ist vg und was hg?

    vordergrund und hintergrund

    FlameDiver schrieb:

    -ebenfalls von objekt abgeleitet:
    passiv_dynamisch_obj <- aktiv_dynamisch_obj <- spieler

    fallen physikalische objekte auch unter aktive_dynamisch_obj?

    siehe unten. passiv_dynamisch=mauern und so (also alles was sich selbst nicht bewegt aber trotzdem berücksichtgt werden muss). aktiv_dynamisch sind z.B. gegner (also objekte die sich bewegen). Wenn du willst kannst du das ganze auch noch so ausbaun, dass es objekte gibt die sich bewegen und nicht bei den physics berücksichtigt werden müssen, das würde die vererbungshierarchie etwas ändern

    FlameDiver schrieb:

    -davon abgeleitet
    -mvc:
    m=objekt
    v=eine klasse, die das tiles singleton verändert
    c=je nachdem, wie dynamische das ganze sein soll, sowas wie statisch (vg+hg), passiv_dynamisch (mauern), aktiv_dynamisch (gegner), spieler; die controller sind jeweils von einander abgeleitet und nehmen das passende _obj entgegen
    -du packst jeweils m+v+c in eine polymorphe klasse
    -dann wrapst du noch den input
    -und schreibst eine klasse, die alles zusammenführt
    Das ist so ganz grob, wie ich es machen würde.

    was ist ploymorph? ach mom ich guck nach.
    ich hätte noch ne idee wie man das mit der map machen kann. baue die map über tiles auf (also im leveleditor. dann wird die nach dem prinzip:
    0,0,0,0,0,0;
    0,1,1,1,1,0;
    0,1,0,0,1,0;
    0,1,0,0,1,0;
    0,1,1,1,1,0;
    0,0,0,0,0,0;

    gespeichert. dann wird daraus ein bild generiert udn das den als map genommen.
    wer sich jetzt fragt: wieso so? nunja das ist einfach. ich hatte vor das man die map mit den waffen sagen wir mal "verändern" kann 😃 . ich nehm mit einfach ne transparanzfarbe und immer da wo ne kugel aufschlägt wird dann sozusagen ein teil der map gelöscht. und kollisiopns abfrage mach ich den über pixel.

    sorry wegen dem vergelich OpenGl und DX ist mit im nachhinein auch eingefallen dsa DX ja noch sound und alles hat 🙂
    aber wie sieht das effectmäßig aus? gibt es in DX zb bumbmapping?
    weil ich ahtte mir überlegt das auch die spielfiguren zu packen damit die plastischer aussehen. war aber auch nur sonne idee.

    aber danke schonmla für die viele hilfe. auch wenn ich viele fragen hab

    Ich glaube du solltest dich erst mal mit den basics auseinandersetzen, bevor du anfängst eine engine zu basteln.



  • Willst du immer noch die engine basteln? Wenn ja, meine ea steht im profil...



  • jap will ich.



  • ness schrieb:

    Willst du immer noch die engine basteln? Wenn ja, meine ea steht im profil...

    Ich meinte damit, dass ich dir, da ich z.zt. nich viel zu tun hab (was sich aber schnell ändern kann), helfen würde, wenn du das möchtest. Und das du dich bei meiner mail adresse, die im profil steht, melden sollst, wenn interesse besteht.



  • ich hab dir geschrieben 😃 die einmal mit dem geistreichen titel: engine.
    ich melde mich wenn ich irgendwie fragen hab.

    gibt es irgenwie ein tut für ne 2d engine? oich hab nämlich noch keins gefunden



  • Für "normales" 2D ohne zusätzliche Effekte würde ich DirectDraw nehmen. 😉
    So, und jetzt könnt ihr mich lynchen 🤡



  • *lynch* ^^
    was gäbe es den noch für alternativen zu directDraw in direct x?



  • http://www.libsdl.org/index.php
    tutorials usw findest du auch dort

    auf http://www.gamedev.net/reference/ findest du allgemeines und auch für sdl ein paar dinge


Anmelden zum Antworten