Funktionsweise eines Grid bzw wie man sich in einer Grid bewegt

  • C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Funktionsweise eines Grid bzw wie man sich in einer Grid bewegt

    Guten Abend :)

    Ich versuche in C mir einen Raster für den Player zu coden. Bevor ich damit jetzt richtig weitermachen kann
    würde ich gerne nach der Funktionsweise eines Raster/Grids fragen. Bisher bewegt sich der Player mit x und y durch tastenabfrage durch die Map.

    Quellcode

    1. void walkup() {
    2. y--;
    3. }
    4. // usw

    der player wird dann an x/y gezeichnet. während der Bewegung wird die walking animation abgespielt

    lg, domis4
  • Also du könntest deine Playercoords immer runden.. du könntest nachdem du eine Taste gedrückt hast die x/y Coords erhöhen/verringern, und dann solange bewegen lassen bis du gerundet stehst.
    Theoretisch würde das so aussehen:

    if (x mod grid == 0 && y mod grid) //In C wäre das mod ein %-Zeichen. also ---------> if(x % grid == 0 && y % grid)
    //grid wäre die gridgröße: z.B.: 16 oder 32 oder wie du auch immer willst.
    {
    /*
    Tastenabfrage + Bewegung um 1 bis 2 Pixel (kommt auf die Geschwindigkeit drauf an)
    */
    } else {
    Bewegung fortsetzen
    }

    Ich hab das mal im Game Maker gebastelt:

    GML-Quellcode

    1. if(x mod 16 == 0 && y mod 16 == 0) {
    2. dir_x = 0;
    3. dir_y = 0;
    4. if(keyboard_check(ord("D"))) {
    5. dir_x = 1;
    6. } else if (keyboard_check(ord("A"))) {
    7. dir_x = -1;
    8. } else if(keyboard_check(ord("W"))) {
    9. dir_y = -1;
    10. } else if (keyboard_check(ord("S"))) {
    11. dir_y = 1;
    12. }
    13. x += dir_speed*dir_x;
    14. y += dir_speed*dir_y;
    15. } else {
    16. x += dir_speed*dir_x;
    17. y += dir_speed*dir_y;
    18. }
    Alles anzeigen


    Ich hoffe du meinst das so.

    MfG Rodrog
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.
  • danke, genau das meinte ich. Funktioniert nahtlos, bis auf eine Kleinigkeit, die anscheinend nur in C auftritt (im GM gab es diesen Fehler nicht)
    Wenn ich 2 Tasten gleichzeitig drücke (links und rechts) geht er in die Richtung, die zuletzt gedrückt wurde. in dem Beispielfall rechts und man kann ihn nicht mehr bewegen
    Legende:
    • dir ist die Richtung 1,2,3,4 im Uhrzeigersinn.
    • subframe ist ein zähler, der alle 16 frames ein ein Animations-Frame des Spielers abspielt
    • canmove ist für die kollisionsabfrage (ob sich in dieser Richtung ein Objekt befindet)


    pastebin.com/faTHLL94

    EDIT: Okay, Denkfehler. Hat sich gelöst^^
    EDIT²: oder auch nicht

    EDIT³: geht:
    Spoiler anzeigen

    GML-Quellcode

    1. if(x % 16 == 0 && y % 16 == 0) {
    2. dir_x = 0;
    3. dir_y = 0;
    4. if(pad.Buttons & PSP_CTRL_UP) {
    5. dir_y = -1; dir = 1; subframe += 1; posby=2; canmove=0;
    6. } else if (pad.Buttons & PSP_CTRL_DOWN) {
    7. dir_y = 1; dir = 3; subframe += 1; posby=4; canmove=0;
    8. } else if (pad.Buttons & PSP_CTRL_RIGHT) {
    9. dir_x = 1; dir = 2; subframe += 1; posbx=2; canmove=0;
    10. } else if (pad.Buttons & PSP_CTRL_LEFT) {
    11. dir_x = -1; dir = 4; subframe += 1; posbx=4; canmove=0;
    12. }
    13. x += dir_speed*dir_x; subframe+=1;
    14. y += dir_speed*dir_y; subframe+=1;
    15. } else {
    16. x += dir_speed*dir_x; subframe+=1;
    17. y += dir_speed*dir_y; subframe+=1;
    18. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von domis4 ()

  • Benutzer online 1

    1 Besucher