Platform example von Mark - Total doofe frage hierzu

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

  • Platform example von Mark - Total doofe frage hierzu

    Sicherlich kenn wir aller hier das Sample mit der tollen Prinzessin ;)

    So und ich versuch grad Jump n Run Engine zu verstehn :D
    aber ich versteh nicht warum die collisionsabfrage auf -4 oder 4 steht bevor sie links oder rechts geht weil sie ja so oder so runterfällt bzw. stehenbleibt wenn sie dagegenläuft. Was hat das dann für einen Sinn ???

    HIER MAL DAS ALLES WAS IN DER"GEH LINKS"AKTION DRIN IST:
    Keyboard Event for <Left> Key:
    set the sprite to spr_left with subimage 0 and speed 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<hab ich verstanden
    if relative position (-4,0) is collision free for Only solid objects<<<<<<<<<<<<<<<<versteh ich nicht ?!
    move relative to position (-4,0)<<<<<<<<<<<<<<<<<<<verstanden, aber es macht doch keinen unterschied mit dieser collision´s abfrage oben ?!
  • Ganz einfach:
    Es wird erst geprüft ob die Position 4 Pixel weiter Kollisionsfrei ist und dann wird die Prinzessin erst um 4 Pixel weiter bewegt. Andernfalls würde man die Prinzessin direkt in die Wand rein bewegen.
  • Ich weiß nicht genau, wo dein Problem liegt, aber ich hab da Vermutungen:

    Die sechseckigen Actions sind if-Abfragen. Sprich, sie stehen hierfür:

    GML-Quellcode

    1. if (aussage)

    Die Begin- und End-Actions entsprechen den Klammern, "{" und "}".

    Was ist aber, wenn man diese in einer if-Abrage nicht verwendet? Es wird nur die nächste Zeile vom if beeinflusst. Das heißt dein Drag'n'Drop entspräche dem hier:

    GML-Quellcode

    1. if (place_free(x-4,y))
    2. x -= 4;

    Wenn die Abfrage scheitert, wird die Verschiebung nicht ausgeführt.


    Andere Vermutung, basierend auf "sie bleibt ja eh stehen":
    Jaein, tut sie nicht wirklich. Solid ist eine merkwürdige Eigenschaft im GM - sie sorgt für eine erzwungene Kollisionsabfrage und hindert andere Objekte daran, sich durch andere hindurch zu bewegen. Dies geschieht aber einfach, indem die Vershciebungen von hspeed udn vspeed nicht umgesetzt werden - die Werte der beiden Variablen bleiben erhalten. Wenn z.B. ein Ball an Geschwindigkeit zunimmt, je länger er rumfliegt, aber in einer solid Instanz "stecken" bleibt, wird er plötzlich wegschießen, wenn die Wand entfernt wird.

    Dieses Verhalten ist sehr selten wünschenswert und von daher wird solid eigentlich nur benutzt, um mit place_free nur bestimmte Instanzen abzufragen.
    Richtig und vor allem gründlich ist es, eine geplante Bewegung vorher auf ihre Durchführbarkeit zu testen. Andernfalls steckt die Figur nachher in der Wand und da diese solid ist, kommt sie da auch je nachdem nicht wieder raus (zumindest nicht durch speed).
    Deine If-Abfrage tut also nichts anderes als "Wenn -4 von mir keine Wand ist, beweg dich um -4 auf der x-Achse (=> nach links)".
    Selbst wenn du alles so programmieren solltest, dass dein solid ausreicht, um sich um all diese Kollisionen zu kümmern, solltest du trotzdem davon absehen - du lernst dabei nur den Game Maker besser kennen, aber nicht wirklich, wie man soetwas auch ohne Game Maker programmieren würde.


    edit:
    Wenn die Antwort von TrunX auch ausreicht, dann wein ich. ^^
  • Benutzer online 1

    1 Besucher