Objekt soll nach kollision an Objekt "kleben"

  • GM 7
  • Objekt soll nach kollision an Objekt "kleben"

    Hallo, habe mal eine frage die wohl für die meisten kein Problem sein wird. Ich möchte ein herabfallendes Objekt (Kugel) mit einem Behälter auffangen. Die Kugel soll dann auf dem Behälter haften und seine Bewegungen mitmachen. (Der Behälter wird vom Spieler gesteuert)

    Ich möchte aber nicht extra ein neues Objekt erstellen um das Problem zu lösen (also durch Change Sprite) da es mehrere Kugeln werden sollen.

    Danke im vorraus

    Eine Lösung im D&D Modus wäre gut...ansonsten GML
  • ganz einfach

    GML-Quellcode

    1. //create event
    2. zusammen=false
    3. //collison event
    4. zusammen=true
    5. //step event
    6. if (zusammen=true){mp_linear_step(object1.x,object1.y,object1.speed,true)}

    object1 ist das object an dem das object in dem der script ist drann kleben soll.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von SDX ()

  • also das von stratege klappt nicht....nun mal noch ne ganz dumme frage....ähm, wie starte ich gml...also gibts da ein button oder ist es ein extra programm? oder ist das ein script?...sorry is mein erstes mal ^^
  • ok also ich hab nun folgendes eingegeben

    {
    //create event
    zusammen=false
    //collison event
    zusammen=true
    //step event
    if (zusammen=true){mp_linear_step(kugel.x,becher.y,kugel.speed,true)}
    }
    danach lässt sich aber der becher nicht mehr steuern

    und andersrum, also:{
    //create event
    zusammen=false
    //collison event
    zusammen=true
    //step event
    if (zusammen=true){mp_linear_step(becher.x,kugel.y,becher.speed,true)}
    }

    wechselt die kugel einfach ihre vertikale richtung in eine horizontale und fliegt weg
  • Thrax schrieb:

    ok also ich hab nun folgendes eingegeben

    {
    //create event
    zusammen=false
    //collison event
    zusammen=true
    //step event
    if (zusammen=true){mp_linear_step(kugel.x,becher.y,kugel.speed,true)}
    }
    danach lässt sich aber der becher nicht mehr steuern

    und andersrum, also:{
    //create event
    zusammen=false
    //collison event
    zusammen=true
    //step event
    if (zusammen=true){mp_linear_step(becher.x,kugel.y,becher.speed,true)}
    }

    wechselt die kugel einfach ihre vertikale richtung in eine horizontale und fliegt weg
    - :D :D :D :D

    das was darüber steht wie z.B. "//Step Event" ist ein Hinweis für dich, dass der GML-Code ins "Create Event" rein soll =D

    Also ins "Create Event" :

    GML-Quellcode

    1. zusammen=false

    Bei der Kollision:

    GML-Quellcode

    1. zusammen=true


    usw.

    Gruß FreaK
  • Du musst dich daran gewöhnen, dass nicht alles immer 100%ig funktioniert.
    Wir sind da, um dir zu helfen, nicht aber um dein Spiel zu programmieren.
    Wenn du noch nicht mal wusstest, was GML ist würde ich dir vorschlagen (ja, dieser Satz schon wieder), dich erst einmal an etwas einfacherem zu probieren. Eventuell kannst du dich vielleicht sogar an GML wagen, damit du davon wenigstens die Grundprinzipien verstehst.

    Zum Problem: Hast du den Code jetzt auf die 3 Events aufgeteilt oder einfach den selben Code für alle genommen?
    Uns würde es weiterhelfen, wenn du mal die Objekt Properties bzw. am Besten gleich die ganze Datei postest ;)
  • eigentlich hab ich ihn aufgeteilt....
    ich will das aber so machen...dachte ja wäre schon was einfaches darum hab ich ja game maker gewählt ;)
    dachte gibt einfach nen button wo ich draufklick und der weiß dann bescheib "Hier jetzt kleben bleiben!" :D

    ice-catcher.rar
  • Haha
    GM ist schon das einfachste um Spiele zu programmieren. Diese supereinfache oberfläche findest du eigentlich sonst nirgends. Aber man sollte schon ein bissn logisch denken können (was ich bei dir nicht bezweifle) um eine doch relativ einfache sache wie das zu meistern. Auserdem habe ich den fehler gefunden, den du hast einfach an einer stelle ein bissn wat vertascht:
    so sollte es sein

    GML-Quellcode

    1. //create event
    2. zusammen=false
    3. //collison event
    4. zusammen=true
    5. //step event
    6. if (zusammen=true){mp_linear_step(becher.x,becher.y,becher.speed,true)}


    Und der code kommt in die kugel

    Du hattest hier den fehler: if (zusammen=true){mp_linear_step(becher.x,kugel.y,becher.speed,true)}
    sollte nicht kugel sondern becher sein!

    MfG: Simon
  • hm geht aber immer noch nicht wirklich. die kugel haftet nicht am becher sondern fliegt nach rechts weg.
    Object1 = Becher
    Object5 = Kugel
    Dateien
    • info.txt

      (440 Byte, 144 mal heruntergeladen, zuletzt: )
  • Ahhh, ich habs mir angesehen, du solltest nicht die jump to x-10 sache im key-right benutzen, denn dann gehen variablen wie speed und direction verlohren. Wenn du das noch nicht ganz raus hast lass erst mal die finger davon und benutze vertical speed und horizontal speed.

    EDIT: zu langsam
    Superdaniels geht auch super :P
  • Gut, dann tausche mal diese Codes aus:

    GML-Quellcode

    1. // === Collision Event ===
    2. zusammen = true;
    3. // Position relativ zum Becher speichern
    4. rel_x = x-other.x;
    5. rel_y = y-other.y;
    6. // Für den Fall, dass du mehrere Becher hast,
    7. // den Becher merken, mit dem die kugel zusammen stößt ...
    8. becher = other.id; // ... ist also optional

    GML-Quellcode

    1. // === END Step Event === (Statt normales)
    2. if (zusammen) {
    3. x = becher.x+rel_x;
    4. y = becher.y+rel_y;
    5. // Wenn du die Zeile oben (becher = ...) weglässt,
    6. // musst du hier object1 anstatt becher nehmen ;)
    7. }

    Ich bin zwar zu spät, aber trotzdem der Meinung, dass meine die bessere Methode ist :P