Problem mit 16x16 Raster

    Dein Charakter bewegt sich aber nicht je 16 oder 32 Pixel sondern immer 1.
    Es war ja wie gesagt nicht als Angriff gemeint, aber jedes Mal wenn du da was gesagt hat ist es noch komplizierter geworden, ich hab
    nix mehr verstanden und das Thema ist in die Versenkung geraten^^

    Edit: Siehst du, es ging gar nicht darum
    Es ging darum, dass der Spieler die Tür nicht mehr auf gleichem Wege erreicht, wenn er vorher an Wände oder sowas gelaufen ist.
    Das ist alles in der file drin die ich gepostet habe

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Matt Mats“ ()

    Wenn man ihn die 16 oder 32 pixel pro step bewegen würde wäre er ja auch direkt da und würde sich quasi von feld zu feld teleportieren. jetzt get es doch nurnoch darum x/y aufs raster zu bringen.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Also ich weiß deine Bemühungen wirklich zu schätzen aber es tut mir leid, ich verstehe dich einfach nicht.
    Das einzige Problem, dass es bei mir gibt ist doch nur die Kollisionsmaske.
    Was anderes kann es doch gar nicht sein, ich hab es doch mit einem 16x16 großen Block gecheckt und da ist es nicht passiert.
    Ich möchte also bitte nur wissen, wie ich die Kollisionsmaske bei 16x16 pixel halte und wie ich den Charakter auf 1 Viertel der 32x32 Quadrate
    platziere.
    Da:
    mediafire.com/file/29fhs4wxhbbzx3m/Grain_fixed_Rhz2.gmz

    Beim Spieler unter //SNAP findest du zB eine einfache Lösung wie man ihn auf dem Raster hält.
    Ich persönlich finde allerdings das sieht ziemlich bescheuert aus.

    Du kannst nicht alles haben. Entweder du bewegst den Spieler mit einem Timer alle paar Steps um ein ganzes Feld, du kannst ihn ganz frei bewegen, oder du kannst ihn zwichen den Feldern frei bewegen (Animation) und dann snappen. Anders geht es doch einfach nicht.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Na wenn ich falsch liege dann sags mir auf, aber ich glaube das was du da haben willst gibt es so nicht ?( :D
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    OK, so nochmal langsam zum mitlesen:

    wie soll sich der charakter bewegen?

    Für mich hört sich dass an wie; völlig frei bewegen aber wenn er stehen bleibt dann muss er auf einem 16x16 raster punkt zu stehen kommen.
    dh drückt man einmal nach links und er bewegt sich mit seiner geschwindigkeit nach links bis er mindestens 16px weit gekommen ist, damit er wieder am raster stehen bleibt.

    Bei den alten Zelda Teilen, war auch alles auf 16x16 grids basiert, man konnte sich völlig frei bewegen und ist dadurch an Türen hängen geblieben (wurde auch nicht iwie automatisch durchgeschoben). Für die Steuerung wie ich hier oben vorgeschlagen hab, hab ich grad kein beispiel.

    Unter umständen mach mal eine skizze und stell sie hier rein:
    zB : sketch.io/render/sk-b67e22874f3c557eadfc40f5f88530c8.jpeg

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    Ja das hab ich mir schon runtergeladen und sehe dein Problem nicht. Denn wenn man sich so frei bewegen kann, dann kann ich auch mit der nase genau an die ecke laufen und komme so nicht durch die tür durch.
    Bitte erklär das nochmal genauer. Auch eine andere Kollisionsmaske hilft da nämlich nicht.

    PS: deine Steuerung ist eh schon fast so wie ich es vorgeschlagen habe nur dass er nicht immer bis zum rasterpunkt geht.

    PPS: Oje, ich glaube ich habe gerade deinen bug replizieren können - wenn man mit der stirn an der wand steht, dann nach links und rechts geht, dann und nur dann kommt man nicht mehr durch die Tür. Uff, ich glaub das hat hier keiner verstanden XD nope, das ging nur nciht weil man nicht nach oben und unten laufen kann wenn man nach links oder rechts gedrückt hält...

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Aku_Ryou“ ()

    Ok ich versuch es nochmal in einzelnen Sätzen zu erklären

    Ich laufe direkt auf die Tür zu.
    Ohne irgendwo anzustoßen.
    Ich komme links durch die Tür.

    Ich laufe herum.
    Ich stoße irgendwo mehrmals an.
    Ich komme links nicht mehr durch die Tür.
    Ich komme nur noch rechts durch die Tür.

    Bis ich es wiederhole.
    Dann komme ich wieder nur links durch die Tür.

    Edit: Ich weiß mir echt nicht mehr zu helfen so schwer ist es doch nicht zu verstehen ._.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Matt Mats“ ()

    Ich will ja nicht aufdringlich sein aber das hat bei meinem Vorschlag doch wenigstens alles funktioniert?
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Nein du hast etwas ganz anderes gemacht von dem ich nicht weiß, was das damit zu tun haben soll .__.
    Ich habe ein 16x16 Raster, du hast gar keins, also komplette freie bewegung (8Wege)
    Allein deswegen kann dein Projekt doch gar nichts mit der Lösung zu tun haben.

    Ich bin wirklich am verzweifeln was ich falsch mache dass mein Anliegen so schwer zu verstehen ist xD
    Später mach ich mal vlt ein kurzes Video dann wird es verständlich

    Matt Mats schrieb:


    Ich bin wirklich am verzweifeln was ich falsch mache dass mein Anliegen so schwer zu verstehen ist xD
    Später mach ich mal vlt ein kurzes Video dann wird es verständlich


    Hab mir das Projekt noch nicht angeschaut aber ich glaube das ich es verstehe.
    Wenn du auf dem Keyboard nach links drückst, soll der Spieler insgesamt 16 Pixel nach links laufen, nicht mehr und nicht weniger.
    Die Kollisionsmaske des Spielers ist nicht 16 x 16, soll aber diese Grösse bekommen ohne das sich der Sprite ändert.

    Wenn du dein Spieler-Objekt öffnest hat es dort einen Tab wo steht <mask>. Wenn du dort einen weiteren Sprite der genau 16 x 16 ist hineintust, überschreibt er die Maske, der alte Sprite bleibt aber sichtbar.
    Du musst einfach beide Sprites im Editor beim Ursprung auf mittig setzen.
    Bilder
    • bsp.png

      44,31 kB, 617×367, 19 mal angesehen

    Matt Mats schrieb:

    Es geht schon in die richtige Richtung, nur ist es so, dass mein Spieler schon 16 pixel geht, aber ich will, dass wenn ein Feld vor ihm kleiner ist als 16 pixel, dass er es dann nicht betritt.
    Heißt er soll nur die Felder betreten, die 16 pixel groß sind.


    Also du meinst mit einem kleineren Feld, dass dort irgend eine Wand Struktur ist oder irgendwas im Wege. Die Wand kann aber nur zu hälfte dort stehen?

    Falls ja:
    bevor der Spieler anfängt zu laufen solltest du den Kollisionscheck machen, da er sowieso nur 16 auf einen Schlag läuft.

    Quellcode

    1. /// nach links laufen
    2. // als erstes müssen wir die Koordinaten dieses Felds (links von uns) bekommen.
    3. var xx = x - 16;
    4. var yy = y;
    5. // nun kann es aber sein das unsere eigenen Koordinaten mittig sind.
    6. // Und die Wand nicht ganz bis zur Mitte geht.
    7. // wir müssen die Koordinaten rastern.
    8. var x1 = (xx div 16) * 16; // das rundet die Selektion der Masse
    9. var y1 = (yy div 16) * 16;
    10. // nun brauchen wir aber alle Seitenpunkte für den Kollisionscheck
    11. x2 = x1 + 16;
    12. y2 = y1 + 16;
    13. // nun der Kollisionscheck
    14. var wand = collision_rectangle(x1, y1, x2, y2, obj_wand, false, false);
    15. // falls sich links eine Wand befindet, wird die variable „wand“ das feststellen und die ID in sich speichern
    16. // falls sich keine Wand befindet wird „wand“ auf -4 (noone) gesetzt.
    17. if (wand == noone) // wenn keine Wand dort ist
    18. {
    19. // dort hingehen
    20. }
    Bilder
    • illustry.png

      1,96 kB, 200×200, 44 mal angesehen
    Ich versuche das nur noch einmal sicherheitshalber zu erklären, damit ich weiß, dass wir beide vom gleichen sprechen^^
    Das Raster ist 16x16 groß und der Spieler soll ich auch nur in 16x16 großen Feldern bewegen können, heißt er geht immer 16 pixel auf einmal.
    Die Kollisionsmaske soll zu diesem Zweck auch 16x16 pixel groß sein, damit es damit keine Probleme gibt

    Matt Mats schrieb:

    Ich versuche das nur noch einmal sicherheitshalber zu erklären, damit ich weiß, dass wir beide vom gleichen sprechen^^
    Das Raster ist 16x16 groß und der Spieler soll ich auch nur in 16x16 großen Feldern bewegen können, heißt er geht immer 16 pixel auf einmal.
    Die Kollisionsmaske soll zu diesem Zweck auch 16x16 pixel groß sein, damit es damit keine Probleme gibt


    Das hab ich mir auch so vorgestellt. Dein spiel ist praktisch wie Schach, nur das man sich in nur 4 Richtungen bewegen kann.
    Mir ist aber noch etwas unklar.
    Soll der Spieler (P)
    nur die grünen Bereiche betreten können, wenn die Wände die dunkelgrauen darstellen?
    Oder dürfen die Wände auch nur Quadrate sein?
    Bilder
    • bsp.png

      1,73 kB, 256×256, 17 mal angesehen