wie funktioniert das stehen auf verschiedenen Ebenen in einem Jump' n Run ???



  • irgendwie hab ich das gefühl das meine lösung einfacher klingt oO



  • Einfacher in der Anwendung vlt., aber auch in der Wartung?



  • Am einfachsten ist eine Kollisionsabfrage, wenn man sein Spielfelt wie ben dargestellt Rasterorientier darstellt. aber wir wollen ja nicht bei jedem Frame die kollision der objekte mit jedem Anderem berechnen, also rechnen wir mit unseren koordinaten aus weche koordinaten das auf dem raster sind, und fragen blos eine Kollision mit dem exaktem Feld, und den benachbarten Feldern ab, wie sonst könnte man auch kontrollieren, ob die Kollision oben, oder unten ist ---> hab ich aus blitzbasic)



  • Krux schrieb:

    Am einfachsten ist eine Kollisionsabfrage, wenn man sein Spielfelt wie ben dargestellt Rasterorientier darstellt.

    Da hast du recht. Das schließt meine Methode allerdings nicht aus.

    aber wir wollen ja nicht bei jedem Frame die kollision der objekte mit jedem Anderem berechnen, also rechnen wir mit unseren koordinaten aus weche koordinaten das auf dem raster sind, und fragen blos eine Kollision mit dem exaktem Feld, und den benachbarten Feldern ab,

    ist natürlich nicht so rechenintensiv, aber nicht umbeding einfacher.

    wie sonst könnte man auch kontrollieren, ob die Kollision oben, oder unten ist

    Stichwort Vektoren.

    mfg.



  • joomoo schrieb:

    ist natürlich nicht so rechenintensiv, aber nicht umbeding einfacher.

    Ich glaube er mein sowas.

    if (spielfeld[player.x][player.y+1] == STEIN)
    { 
       // Spieler steht auf Stein. Sonst weiterfallen lassen.
    }
    

    Also so schwer scheint das nicht zu sein. 😃



  • Netzwerk-Latenz schrieb:

    joomoo schrieb:

    ist natürlich nicht so rechenintensiv, aber nicht umbeding einfacher.

    Ich glaube er mein sowas.

    if (spielfeld[player.x][player.y+1] == STEIN)
    { 
       // Spieler steht auf Stein. Sonst weiterfallen lassen.
    }
    

    Also so schwer scheint das nicht zu sein. 😃

    jo, nur dass man bei einer Umsetzung, wie sie da steht sich nicht frei bewegen kann, aber dafür ist es verdammt einfach und absolut rechenleistungssparend. Besser wäre es, um etwas mehr dynamik reinzubringen, dass man ein erst folgendes tut

    if (spielfeld[(int)Player.x/RASTERBREITE,(int)Player.y/RASTERHOEHE])
    

    Player.x und Player.y sind natürlich fließkommazahlen, sonst sind spiele wie supermario nicht zu realisieren. Aber natürlich geht es auch ohne, z.B. black Throne oder Flashback sind dafür Beispiele.



  • Netzwerk-Latenz schrieb:

    joomoo schrieb:

    ist natürlich nicht so rechenintensiv, aber nicht umbeding einfacher.

    Ich glaube er mein sowas.

    if (spielfeld[player.x][player.y+1] == STEIN)
    { 
       // Spieler steht auf Stein. Sonst weiterfallen lassen.
    }
    

    Also so schwer scheint das nicht zu sein. 😃

    Stimmt, auf so was bin ich gar nicht gekommen 🙂
    Aber wenn man z.B. Gegner oder Items einbauen will wird es dann kompiliziert.

    mfg.



  • hmm scheint mir doch ein recht interessantes thema zu sein... drum waer ich auch gern mal so neugierig um zu fragen, wie so eine classe aus sehen könnte? würdet ihr mir vllt. mal ein beispiel bringen?? und vllt. wie man ein sprung fuer eine figur erstellt... weil ich hatte mal ausprobiert:
    bool sprung = false;
    if( taste == 'w' ) {

    int jump = 0;
    if( jump < 3 ) {

    player.y--;
    }
    sprung = false;
    }
    aber dies ging halt net, hmmm...

    also waer nett wenn ihr vllt. mal so Bsp.Code habt.



  • T0bi schrieb:

    hmm scheint mir doch ein recht interessantes thema zu sein... drum waer ich auch gern mal so neugierig um zu fragen, wie so eine classe aus sehen könnte? würdet ihr mir vllt. mal ein beispiel bringen?? und vllt. wie man ein sprung fuer eine figur erstellt... weil ich hatte mal ausprobiert:
    bool sprung = false;
    if( taste == 'w' ) {

    int jump = 0;
    if( jump < 3 ) {

    player.y--;
    }
    sprung = false;
    }
    aber dies ging halt net, hmmm...

    also waer nett wenn ihr vllt. mal so Bsp.Code habt.

    Am besten schau dir Vektoren an. Dann kannst du einfach wenn einer springt den Bewegungsvektor um einen Sprungvektore addieren. Das ganze wird dann automatisch von deinem Schwerkraftsvektor wieder auf den Boden geführt.

    mfg.



  • du meinst jetzt net den container vector oder?



  • nein



  • Vektoren aus der linearen Algebra!

    Mathematik, schonmal gehört?

    ::edit::
    Aber kannst es ja mal mit dem Container probieren 😃



  • xindon schrieb:

    Vektoren aus der linearen Algebra!

    Mathematik, schonmal gehört?

    ::edit::
    Aber kannst es ja mal mit dem Container probieren 😃

    std::vector kann man doch wunderbar als n-dimensionalen Vektor verwenden. Grundlegende mathematische Funktionalität sollte recht einfach zu implementieren sein! 🙂

    grüße



  • Nun ich habe das ganze auch gelöst.
    Und zwar habe ich anfangs einen Editor geschrieben, bei dem man verschiedene Objekte hinzufügen konnte.
    Später im Spiel frag ich dann nurnoch ab ob sich die x und y Koordinaten des Spielers innerhalb eines dieser Objekte befinden.
    Die Abfrage sähe dann ungefähr so aus:

    if(Spielerx > objekt->getposx() && spielerx < objekt->getposx()+objekt->getbreite()
    && Spielery > objekt->getposy() && spielery < objekt->getposy()+objekt->gethoehe()
    

    Ich denk das müsste schon so gehen 🙂
    cya
    David


Anmelden zum Antworten