vor und hinter Objekten stehen

  • vor und hinter Objekten stehen

    Ich habe einen Gegenstand, zum Beispiel einen Baum und meine Figur kann davor und dahinter sein. Ich habe es so gelöst, dass die Figur und der Baum je eine Maske um ihr "Standbein" haben um Kollisionen auszuführen. Weiterhin habe ich den depth-Wert des Baumes an den x-Wert der Figur angepasst. Das funktioniert soweit ganz gut. Doch was ist wenn sich noch weitere Figuren (z.B. Gegner) am Baum einfinden, einige davor, einige dahinter. Wenn mein Spieler hinter dem Baum steht, dann liegt der Baum auch über dem Gegner der davor steht. Wie löst man dieses Problem am geschicktesten ?
    Bilder
    • baum.jpg

      34,32 kB, 172×377, 324 mal angesehen
    Einige meiner Spiele:

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

  • also eigentlich geht das ganz einfach indem du, immer wenn sich was bewegt, folgenden code benutzt:

    Quellcode

    1. depth = -y;

    Ein problem mit dem code könnte bei dir jetzt aber sein, dass die origins von den sprites nicht genau stimmen....Ich hab mir mal erlaubt umzumalen, wie es aussehen sollte...
  • Grundsätzlich habt ihr beide Recht, nur dann muss auch jedes bewegliche Objekt im Step-Event den depth-Wert anpassen, die nicht beweglichen legen ihren depth-Wert in der Create-Aktion fest. Kann leider momentan nicht weiterbasteln, da der Gamemaker 6 mein Spiel nicht mehr starten will. Keine Fehlermeldung, der Gamemaker verschwindet, aber das Spiel startet nicht, ich sehe nur den blanken Desktop und muss das Spiel über den Taskmanager beenden. Das von Anga bearbeitete Bild zeigt die Masken die ich eingestellt habe, zwecks Origin muss ich halt jeweils dazuaddieren was noch fehlt, sonst müsste ich zahlreiche andere Aktionen umschreiben...
    Einige meiner Spiele:
  • agnahims lösung is zwar ganz richtig aber persönlich würd ich dir raten das hier stattdessen zu machen

    Quellcode

    1. depth = room_height-y;

    So haben die Objekte keine negativen depth-werte. Des is ganz praktisch wennste z.b. n HUD oder sowas machen willst dann weiste genau dass depth <= 0 sein muss damits über allen spielobjekten gezeichnet wird
  • Original von boxxar
    Von allen objeckten muss der Dethwert doch = dem y wert sein,
    glaube ich!

    nee. -y stimmt schon;
    umso kleiner der depth wert, umso weiter is das object "vorne";
    beispiel:
    ein object hat einen y wert von 0; muss also ganz hinten sein;
    dann folgt aus depth = -y => depth = 0;
    ein object, dass direkt unter dem ersten is (also mit y wert 1) müsste vor diesem sein, also einen kleinerern depthwert haben
    also aus depth =-y folgt dann depth =-1 (und sieh da; der depthwert is keliner)
    www.glowingorb.de
    „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

    (Schachweltmeister Emanuel Lasker)
  • Willkommen im Klub, Interceptor. Allerdings hat er das bei mir erst seit der letzten Beta gemacht und es läuft unter 6 fast gar nichts mehr. Die Grafikenkartenunterstützung ist echt ein Problem.
    Ne Ahnung, woran es liegen könnte?

    Und noch ne Ergänzung: Sollten Objekte eine gewisse Grunddepth haben, sollte die natürlich immer hizuadiert werden. Am bestensind hierfür 10er Potenzen.
  • Dann wollen wir mal auf 6.1 hoffen...
    Derweil Danke für die Tips, es scheint doch wesentlich einfacher zu gehen als ich mir das vorgestellt habe. Trotzdem ein haufen Arbeit, jedes Objekt extra anzupassen. Aber das ist ganau der Grund wieso ich das hier im Forum gefragt habe: Gäbs noch nen leichteren Weg, dann hätte ich hier haufenweise Arbeit umsonst getan. Sollte ich den mein Spiel auf dem Gamemaker 6 wieder ordentlich zum laufen bringen und das Problem immer noch nicht lösen können, dann rühr ich mich wieder.
    Einige meiner Spiele:
  • Original von MewX
    Willkommen im Klub, Interceptor. Allerdings hat er das bei mir erst seit der letzten Beta gemacht und es läuft unter 6 fast gar nichts mehr. Die Grafikenkartenunterstützung ist echt ein Problem.
    Ne Ahnung, woran es liegen könnte?

    Und noch ne Ergänzung: Sollten Objekte eine gewisse Grunddepth haben, sollte die natürlich immer hizuadiert werden. Am bestensind hierfür 10er Potenzen.


    Hä? Ich hab kein Wort von dem Was du gesagt hast, verstanden...
  • Original von Glowing Orb
    Original von boxxar
    Von allen objeckten muss der Dethwert doch = dem y wert sein,
    glaube ich!

    nee. -y stimmt schon;
    umso kleiner der depth wert, umso weiter is das object "vorne";
    beispiel:
    ein object hat einen y wert von 0; muss also ganz hinten sein;
    dann folgt aus depth = -y => depth = 0;
    ein object, dass direkt unter dem ersten is (also mit y wert 1) müsste vor diesem sein, also einen kleinerern depthwert haben
    also aus depth =-y folgt dann depth =-1 (und sieh da; der depthwert is keliner)


    Oh! Meinte ich ja!
    Nur es reicht nicht ein Objeckt anzupassen. Das wollte ich damit sagen!
  • Bei mir läuft der GM 6 zur Zeit wieder recht stabil. Ich hab jetzt bei allen Objekten, bei denen es relevant ist depth=-y eingestellt und bis jetzt funktioniert das ganz hervorragend. Problem gelöst. Danke für die Hilfe!
    Einige meiner Spiele:
  • Benutzer online 1

    1 Besucher