Kollisionsabfrage Problem

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

  • Kollisionsabfrage Problem

    kann sein das ich mich ma wieder doof anstelle aber irgentwo in dem code:

    GML-Quellcode

    1. if(keyboard_check_direct(vk_left))
    2. {
    3. if(place_empty(x-8,y))
    4. {
    5. direction = 180
    6. x-=2
    7. }
    8. }
    9. if(keyboard_check_direct(vk_right))
    10. {
    11. if(place_empty(x+8,y))
    12. {
    13. direction = 0
    14. x+=2
    15. }
    16. }
    17. if(keyboard_check_direct(vk_up))
    18. {
    19. if(place_empty(x,y-8))
    20. {
    21. direction = 90
    22. y-=2
    23. }
    24. }
    25. if(keyboard_check_direct(vk_down))
    26. {
    27. if(place_empty(x,y+8))
    28. {
    29. direction = 270
    30. y+=2
    31. }
    32. }
    Alles anzeigen


    ist ein fehler ziel des codes ist es das obj wenn etwas im weg steht zu stopen

    Leider funtzt das nicht egal ob ich nun collision_point ,place_free oder empty nehm er geht einfach durch die wände durch
    Ich hab auch schon so die these das er durch die wände geht weil die wand aus einem einzigen bild mit alpha farbe besteht(vom maker die alpha farbe nicht die vom sprite_set_alpha_from_sprite )

    Hoffe könnt mir helfen bei meinem wirklich kleinem problem x'D

    mfg CSX360
  • Hört sich danach an, als sei die Wand das Problem. Wenn die wirklich komplett transparent ist, aber auf precise collision checking ist, kann da keine Kollision stattfinden.
    Lösung 1: Stell Transparenz beim Sprite weg und entferne visible beim zugehörigen Wand-Object.
    Lösung 2: Stell beim Sprite Precise Collision checking aus und die Bouding Box auf Full Image.
    Lösung 3: Stell beim Wand Objekt eine Maske ein, die aus einem Sprite der richtigen Größe ist.

    Außerdem sollte das Wand-Objekt solid sein. Welche Funktion (place_empty, collision_free etc) die Funktion der Wahl ist, weiß ich jetzt auswändig nicht und müsste erst in der Hilfe nachsehen, aber wie gesagt, das Hauptproblem sollte die transparente Wand sein...
    Einige meiner Spiele:
  • etzt einmal probiert die wand einzeln zu haben was natürlich nicht funktioniert hat why ever xx

    ich hab das projekt ma hochgeladen(siehe unten)

    Ich find keinen fehler *kreisch und zusammenbrech*
    aber daran das ich den spieler mit draw zeichnen lasse kanns auch nicht liegen ~~
    //als zwischenfrage kurz noch: wenn die depth 2er objecte ungleich ist und diese nen crash haben zählt der maker das auch als collision?
    Dateien
    • quartal2.rar

      (25,21 kB, 122 mal heruntergeladen, zuletzt: )
  • 2 Fehler:
    1. Es macht sehr wohl was aus, dass du den Spieler nur im Draw Event zeichnest. Dadurch, dass er kein Sprite hat, hat er auch keine Kollisionsbox. Stell eine Maske in der Größe des Spielers ein, dann kann er auch Kollisionen mit anderen Objekten haben.
    2. Die Maske des Wandobjektes ist grober Unfug. Das ist ja ein komplettes Level, bestehend aus mehreren Blöcken. Die Maske muss genau die Größe des Blocks haben, den sie repräsentiert.

    Mit folgenden 2 Schritten habe ich die Sache zum Laufen gebracht. Beim Objekt "player" habe ich als Maske "user_spr" eingestellt. Beim Objekt wall habe ich als Maske <same as sprite> eingestellt.

    PS.: es macht Sinn, die Wandobjekte einzeln zu machen. Wenn du jedes Level als ein Sprite zeichnest, machst du dein Spiel unnötig groß, selbst wenn du theoretisch etwas Rechenzeit durch geringere Objektanzahl sparst.
    Einige meiner Spiele:
  • *auf die knie fall*

    Hab gedacht das place_free/empty/etc. abfragen sind die unabhängig von der Boundingbox abfragen xx
    Ausserdem hab ich nicht bemerkt das ich bei der wall noch die falsche maske hatte x'D

    Is gelöst thx für die hilfe ; )
  • Eins noch: Ich würde place_free benutzen. Das bezieht sich nur auf solid-Objekte, so kannst du zB. andere "nicht-solid" Objekte zur Dekoration einbauen, ohne dass deine Figur dran hängenbleibt.
    Einige meiner Spiele:
  • Benutzer online 3

    3 Besucher