Fortgeschrittene Collision-Abfrage/Depth

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

  • Fortgeschrittene Collision-Abfrage/Depth

    Hallo,

    erstmal vorweg: Ich habe nur die GM 7 Light-Version. Hoffe dass ich das Problem auch damit lösen kann...

    Nun zum Problem:

    Ich möchte in einem Shooter (Sicht von schräg-oben) Hindernisse (z.B. einen Baum) erstellen.

    Dieser Baum hat ein Sprite, z.B. mit den Maßen 20x80. Dieser soll für die Spielfigur natürlich ein Kollisionsobjekt darstellen. ABER: Ich möchte das die Spielfigur "hinter" und "vor" dem Baum langgehen kann. Das heisst, ich wähle den maskindex unterschiedlich, z.B. nur 20x40 gross. Dadurch sind oben und unten jeweils 20x20 große Flächen frei. Die Spielfigur kann also ohne eine Kollision auszulösen so stehen/laufen, das ihr Sprite den Baum überlappt. Sie steht also mit den Füßen vor dem Baumende, ihr Körper ist dann aber (wie ja auch in Wirklichkeit möglich) "über" den Baumwurzeln. Kein Problem, da: Baum.depth=1, Spieler.depth=0...

    Wenn die Spielfigur nun aber "hinter" den Baum läuft, quasi mit den Füßen schon im Baum steht, aber immer noch über dem mask_index des Baumes, dann wird wegen der vorherigen Einstellung der Objekttiefe das Spielersprite wieder ÜBER das Baumsprite gemalt. Es soll aber darunter! Der Spieler steht ja hinter dem Baum!

    Die einzige Lösung die mir einfällt: Jeden Baum im Step-event abfragen lassen, ob Spieler.y > Baum.y ist und dementsprechend die Tiefe ändern.

    Aber bei vielen Hindernissen wird das ganz schön viel Rechnerarbeit beanspruchen, oder?

    Schonmal danke für andere Vorschläge :)

    Casi82
  • Ich beschreibe es einfach mal in D&D, da bei dir nicht steht ob du auch GML kannst...

    Im Step Event :
    Setzt du die Variable "depth" auf "-y"

    An den Sprites musst du nun folgendes machen ():
    Du must den Kollisions Bereich (Bounding Box) auf Füße / Stamm richten, und den Origin stellst du in der Mitte davon.

    So mach ich das zumindestens immer

    MFG
    Metalknight
  • Du könntest die Depth nach der Y stelle einstellen.

    Also der Spieler bekommt jeden Step eine neue depth basierend auf der Y position.

    Wenn dein Baum also bei position 210 liegt, der spieler darunter steht bei position 220 dann gib ihm einen niedrigeren depth. Steht der spieler auf 200 dann hat er einen höheren depth (wenn ich das richtig rum in erinnerung habe). Ich hoffe du weisst jetzt was ich meine.


    Edit//:
    Zu lahm :/ :D
  • Mach die Abfrage ins StepEvent des Spielers - so hast du nur an einer Stelle den Code die Werte vergleicht. Wenn du die Abfrage ins Baumobjekt machst, wäre das AnzahlBäume * Events - ziemlich viele wahrscheinlich.

    Wegen der einen Abfrage würde ich mir keine Sorgen machen. Du kannst es ja so machen, das die Berechnungen erst dann durchgeführt werden, wenn du nah genug an einen Baum gehst. Beispielsweise mit collision_circle.
    On teh internet u pwn noobs - but in real life noobs own you.
  • Du könntest die Depth nach der Y stelle einstellen.
    Ähmm,... um genau zu sein sollte man es auf -y im step machen (wie schon gesagt bei allen bewegenden, und bei stehenden sachen im create).
    Würde man dies auf Y machen, würden die hitneren sachen VOR den vorderensachen sein,.. ;D

    Zu deiner Abrfage: Wäre doch bisschen doof, wenn man erst die depth überprüft /bzw. die y, und dann diese ändert, wenn das alles in eine zeile geht =D

    MFG
    Metalknight