Erstes Spiel - Ein paar Fragen

  • Win

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

  • Erstes Spiel - Ein paar Fragen

    Hallo Miteinander.
    Ich bin wie ihr einem vorhergehenden Post entnehmen könnt, an meinem ersten Jump'n Run Spiel im GMS.
    Ich benutze DND, scripte also nichts selbst. Benutze aber variablen.
    Habe nun 3 Dinge die einfach nicht funktionieren. Dazu natürlich Fragen. Hoffe man kann das DND nachvollziehen.

    1. Frage
    Mein läuft, springt und duckt sich. Jedoch passiert es immer wieder, dass er im fallen oder im Sprung an einer Wand kleben bleibt, man nochmals Sprung drückt und er weiterspringt.
    Auch dass er in einer Wand stecken bleibt. Zuerst dachte ich, es liegt an der kollisionsabfrage und habe die collisionsmaske auf ganzes bild (alle bilder sind 32x32) gesetzt, hatte aber dann das gleiche problem. Muss also irgendie am Code liegen resp. dem DND:
    Im Step-Event des Objektes setze ich den Vertikalen Speed auf 2, Relativ. So dass man immer an Fallgeschwindigkeit zunimmt.
    Danach setze ich eine "if there is a collision at position" auf x=hspeed und nur mit solid objects.
    Hier wird ein block gestartet, bei der Move to contact mit maxspeed 5 against solid objects und hor. speed=0.
    Das gleiche "if there is a collision at position" auf vspeed inkl block von vorher auch auf vspeed.
    somit habe ich eine anziehungskraft und die kollision zuerst auf horizontal, danach auf vertikal.
    gehen wir zum event keyboard links: hier überprüfe ich anhand "if an expression is true" ob hspeed > -5 ist, wenns so ist wird horspeed auf -0.8 gesetzt, relativ.
    das gleiche nochmals in event links_gepresst, nur mit animation zum laufen. das umgekehrte in rechts und rechts_gepresst. also der player kann nun links und rechts laufen.
    klingt meiner ansicht alles sehr logisch und sollte nicht zu "stehen in der luft, an der wand" führen... oder mache ich da einen gedankenfehler?

    2. Frage
    Leitern. Im Spiel habe ich schon einen Sprung, deshalb hab ich das ganze wohl etwas umständlich angegangen. jetzt geht der Charakter zwar Leitern hoch, jedoch steigt er sie auch gleich wieder hinunter wenn man die Taste gedrückt hält. Auch bleibt er manchmal einfach stehen in der Leiter (siehe vorhergehende Frage), eventuell weil er an der Wand angekommen ist. DND lautet so:
    im event keyboard oben_gedrückt wird überprüft ob der spieler unter sich solid objects hat, nur dann wird beides ausgeführt (grosser block).
    if there is an object on the position (leiter), relativ dann:
    vspeed-3, relativ. animation für nach oben gehen.
    if there is NOT an object on the position (leiter), relativ dann:
    set vspeed-18 (wird ja dann siehe vorher von vspeed im step runtergeholt). jump-animation anzeigen.
    er sollte oben an der leiter einfach stehenbleiben oder sich nicht weiter bewegen, stattdessen macht er eine fliessende bewegung ins umgekehrte: nach unten. an was liegts?

    3. Frage
    Beim laufen, wenn man springt und einfach weiterläuft (sprich die lauftasten nie loslässt, gelegentlich springen drückt) sieht der charakter nach dem ersten sprung beim laufen aus wie im springen. springen wird mit oben_gedrückt realisiert, die ani sollte doch wechseln sobald man nicht mehr oben drückt. kapier nicht, wieso das sich das nicht ändert.


    ja. die wichtigste frage wäre die erste. ist mir klar, dass dies kurz eindenkzeit benötigt, wäre aber recht froh wenn mir da jemand weiterhilft. vieles vom dnd-code habe ich jetzt weggelassen, zb verändert die spielfigur je nachdem auf was für felder sie steht ihre klamottenfarbe (spritewechsel) und es gibt das einte oder andere coole objekt (trampolin, laserkanone für 2 schüsse usw). bin nun schon seit 10 Stunden dran, habe auch etliches ausprobiert. besonders am anfang mit einem neuen programm ist das ein bisschen zum haare raufen ;) sage aber schon mal danke im voraus, für die dies besser wissen und mir helfen :)
  • Okey, also ich gehe mal von unten nach oben, so gut es geht und so weit ich das deiner Beschreibung entnehmen konnte.

    Ich nehme an das du die links und rechts lauf Animation im Step Event stehten hast, deshalb ändert sich die Animation nach dem Sprung auf die Laufanimation, solange das Step Event nicht weiß das du springst. Also bau am besten eine Variable jump ein und nur wenn jump = 0 dann soll er die laufanimation abspielen können, wenn jump = 1 dann die Sprunganimation.

    Zu den Leitern, auch hier kommt dir das Step Event in die Quere, da es sobald du den sicheren Boden verlässt es dich wieder runterzieht als würdest du springen, du brauchst also zB sowas wie jump = 2 damit if jump < 2 die Gravitation aktiviert ist und if jump = 2 sie deaktiviert ist. Sobald du mit der Leiter kollidierst und x,y+1 relativ kein solides objekt ist (bzw kein Boden drunter) dann ist jump 2 und das Objekt weiß das es isch auf einer Leiter befindet und demnach handelt.

    Spoiler anzeigen
    So und bei deiner ersten Frage hast du wirklich einen Denkfehler, da du ja hspeed und vspeed auf 0 setzt, also bleibt dein Charakter in der Luft stehen wenn er sich an oder kurz vor einer Wand befindet.
    Frag lieber genauer ab;


    Vielleicht hast du einen Fehler gemacht wenn du vspeed abfragst, dass du x+vspeed benutzt hast statt y + vspeed. Weiters könntest du auch move to contact solid weglassen, nur hspeed auf 0 setzen und bei collision x auf previous.x setzen, dann rennst du nicht durch die Wand und nur die horizontale Bewegung wird gestoppt bis über oder unter dir wieder Boden ist, der vspeed stoppt.

    so...es ist schon spät, aber ich hoffe ich konnte dir ein bissl helfen :)

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • zu frage 1: vspeed und hspeed stimmen. habs nun so geändert:
    macht er eine horizontale collision dann
    jump to xprevious, yprevious, relativ
    hspeed = 0

    trotzdem bleibt er in der wand stecken :( achja move to contact bei horizontal herausgenommen

    2. leitern. variable zum überprüfen reingetan, bringt aber nichts. er fällt die leiter nicht runter, er geht die leiter genauso wieder runter wie er hochgeht vom speed her. lässt man die nach oben taste los, dann fällt er die leiter runter. die leiter wird ja aber schon im keyboard-event nach oben_gedrückt überprüft (siehe 2. frage).

    3. der sprung.
    habe die animation nicht im step sondern im keyboard up_gedrückt. bei keiner taste soll er die figur stehend zeigen, tut er nicht. bei links_gedrückt soll er sie laufend zeigen, tut er auch nicht. er zeigt sie einfach springend ;) ausser ich lasse alle tasten los und laufe nur links oder rechts.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Metamorphose ()

  • Also zum ersten solltest du nur x auf xprevious setzen und y auf y lassen damit er eben nur in der x achse stehen bleibt und bei den zwei anderen Problemen verstehe ich dein Problem nun entgültig nicht bzw wie es dazu kommen soll. Da wäre es günstig wenn du uns die gmk hier mal hochlädts oder screenshots von deinem DnD Code. Ich kann sonst nur raten worans liegt.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Aso, ja dann eine gm81 bitte und wenn hier noch jemand mithelfen könnte wärs cool :)

    Wenn dein Projekt schon viele obkekte etc hat, dann wärs gut wenn du nur eine abgespeckte alternative version hochstellst bzw wenn der Rest noch geheim bleiben soll^^

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • ich würde mal meine signatur angucken die hat so einen komischen link


    edit:
    :P
    da sind hilfreiche tutorials
    :P
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • ich hab nun den charakter auf 1 einziges image reduziert, welches gedreht wird bei gleicher kollisionsabfrage.
    das geht, kein stecken bleiben.
    ein zweites image (eins für links, eins für rechts) eingefügt und nicht mehr mit rotate und es funktioniert wieder nicht.
    was mich dazu bringt, dass ich wohl bei den sprites was falsch mache.
    dort die kollisionsabfrage von automatisch auf ganzes bild gesetzt und als das nicht geklappt hat, selbst eingegeben dass es stimmt. nix hilft.

    //edit
    hab nun die kollisionsbox klein und bei allen figuren gleich gemacht (10x32 bei 32x32). jetzt bleibt er nicht mehr in der wand stecken sondern nur noch wenn man ecken gekonnt anspringt. ist doch mal ein fortschritt :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Metamorphose ()

  • Metamorphose schrieb:

    ich hab nun den charakter auf 1 einziges image reduziert, welches gedreht wird bei gleicher kollisionsabfrage.
    das geht, kein stecken bleiben.
    ein zweites image (eins für links, eins für rechts) eingefügt und nicht mehr mit rotate und es funktioniert wieder nicht.
    was mich dazu bringt, dass ich wohl bei den sprites was falsch mache.
    dort die kollisionsabfrage von automatisch auf ganzes bild gesetzt und als das nicht geklappt hat, selbst eingegeben dass es stimmt. nix hilft.


    Deswegen sollte man Masken verwenden. ;)