Problem mit Kollision

  • GM 8

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

  • Problem mit Kollision

    Hi.

    Ich habe ein Problem mit der Kollision.

    Ich nutze GM8 (lite) und DragDrop


    Ich hab ein Objekt Player und eines menu.

    Das Menu wirkt als Rahmen wie auch als HUD, d.H. der Room ist 1024x768px groß, darauf liegt der Menu, dann der Player
    siehe bild
    (das GRÜNE ist der Background)

    Ich will also dass der Player mit dem HUD kollidiert, dies erreichte ich per Event Colission (mit menu) und Bounce aginst solid Objects.


    Soweit so gut, es funktioniert, läuft der Player gegen einen Seitlichen Bzw. den unteren Rand, kollidiert er, und kann nicht durch.
    läuft er allerdings gegen den Oberen Rand, geht er hindurch, die Kollision greift einfach nicht :(

    woran kann das liegen?

    Danke & LG
    Bilder
    • Unbenannt.png

      319,36 kB, 1.024×655, 172 mal angesehen
    • Unbenannt2.png

      52,9 kB, 1.073×685, 238 mal angesehen
  • Also die Kollisionmask hab ich mal angehängt...

    Der Player wird unten, rechts u. links aufgehalten, aber oben läuft er durch.

    Wenn er oben das Menü "berührt" kann er sich NICHT MERH nach Links&Rechts&uNTEN BEWEGEN; nur nach oben...

    Woran leigt das? bzw. was ist bei der Kolisionmask falsch?
    Bilder
    • Unbenannt.png

      319,61 kB, 1.358×746, 161 mal angesehen
  • Hi

    Hast du mal folgendes versucht

    Im Collision Event

    GML-Quellcode

    1. image_speed = 0;


    Da ich aber nicht weis wie du den Player laufen lässt, ist das hier nur eine Vermutung.
    Ich lass mein Player immer über den Image_speed sich fortbewegen.

    Damit du es nicht bei allen Richtungen hinein schreiben muss, erzeuge ein neues Player-Objekt mit den Namen z.B obj_Player
    bei den anderen Player Objekten aktivierts du dann das Parent und wählst dann obj_Player aus.
    Jetzt richten sich alle anderen Player Objekten nach obj_Player aus. Spart viel Tipp arbeit.

    Gruss Drachen
  • Vielleicht hilft das:
    Mach für das laufen Keyboard-Events (keine Key Press-Events) und als Aktionen solltest du Move to contact :action_contact: mit den Parametern:
    Direction - 0 für rechts, 90 für hoch, 180 für links, 270 für runter
    Maximum - etwas irreführend, das ist aber im Grunde die Geschwindigkeit (5 ist ein guter Richtwert, spiel damit ein wenig rum)
    against - solid objects

    Du solltest auch sicherstellen dass d im Menü-Objekt das häckchen bei "Solid" drin hast
  • Hi.

    Da ich aber nicht weis wie du den Player laufen lässt, ist das hier nur eine Vermutung.
    Ich lass mein Player immer über den Image_speed sich fortbewegen.

    Damit du es nicht bei allen Richtungen hinein schreiben muss, erzeuge ein neues Player-Objekt mit den Namen z.B obj_Player
    bei den anderen Player Objekten aktivierts du dann das Parent und wählst dann obj_Player aus.
    Jetzt richten sich alle anderen Player Objekten nach obj_Player aus. Spart viel Tipp arbeit.


    Der player bewegt sich mittels KeyPressed/Released und movefixed fort.

    Es gibt auch nur ein Player-Object, nicht mehrere.
    Nur dieses wechselt den Sprite beim KeyPress...



    Mach für das laufen Keyboard-Events (keine Key Press-Events) und als Aktionen solltest du Move to contact mit den Parametern:
    Direction - 0 für rechts, 90 für hoch, 180 für links, 270 für runter
    Maximum - etwas irreführend, das ist aber im Grunde die Geschwindigkeit (5 ist ein guter Richtwert, spiel damit ein wenig rum)
    against - solid objects

    Wenn ich es jetzt also mittels Keyboard-events mache, käuft der Player immer bis er wo kollidiert, richtig?
    Denn genau das möchte ich verhindern, er soll sich nur bewegen, solange man die Taste gedrückt hält.

    LG
  • CreamyCewie schrieb:

    Wenn ich es jetzt also mittels Keyboard-events mache, käuft der Player immer bis er wo kollidiert, richtig?
    Denn genau das möchte ich verhindern, er soll sich nur bewegen, solange man die Taste gedrückt hält.


    Nein, der Code wird nur ausgeführt, wenn die Taste gedrückt ist. Die Key Press und -Release Events sind dazu da, um irgendwas zu machen in dem Moment, in dem die Taste gedrückt wird oder losgelassen wird (braucht man, wenn man die Bewegung über den Speed macht, so wie du wahrscheinlich). Mit den Parametern, die ich dir als Beispiel aufgeführt habe, wird sich der Player 8 Pixel pro step bewegen und zwar nur wenn die Taste gedrückt ist.