lite anderes object solid machen

  • GM 7
  • lite anderes object solid machen

    Hi,
    ich möchte folgendes machen.
    wenn der spieler ein bestimmtes objekt berührt, soll das objekt wall solid=false werden, und wenn der spieler ein anderes berührt woeder solid=true werden.
    doch wie mache ich das, dass ich ein anderes objekt solide oder "unsolid" mache?
    gibt es da einen code dafür?

    danke schonmal

    terra
  • Hi,
    der code erscheint mir recht sinnvoll, aber er klappt nicht.
    mal zur erläuertung:

    ich möchte eine platform machen die folgendermaßen aufgebaut ist:

    ..........
    _______
    ----------

    ___: das ist die eigentliche platform die von anfang an solide ist.
    -----: das soll im kontakt mit dem spieler die platform (___) "unsolide" machen, damit man durchspringen kann
    ......: das soll die platform wieder solid machen, damit man darauf stehen bleiben kann.

    es klappt leider nicht :(
  • Du möchtest also eine Platform durch die man von unten durchspringen, aber auf der man stehen bleibt?
    pack mal diesen Code in das Kollisionsevent mit der Platform:

    GML-Quellcode

    1. if(vspeed > 0)
    2. with(other) solid = false
    3. else
    4. with(other) solid = true
    5. if(other.solid = true) vspeed = 0

    Mit diesem Code überprüfst du deinen aktuellen vspeed(ist er größer als Null dann kommst du von unten, ansonten kommst du von oben)und je nach dem wird die Platform dann eben solid oder nicht solid.

    ,,Ich weiß nicht, mit welchen Waffen sich die Menschen im 3. Weltkrieg bekämpfen werden.
    Aber im 4. werden es Keulen sein!"
    -Albert Einstein
  • Das wird nicht funktionieren, da zum Zeitpunkt des Kollisionsevents schon entschieden ist, ob das andere Object solid ist oder nicht.

    Um zu testen, ob dieser Ansatz überhaupt funktioniert, würde ich dies hier tun, so Performance lastig es auch sein mag:

    GML-Quellcode

    1. with (objPlatform)
    2. {
    3. solid = (bbox_top > other.bbox_bottom);
    4. }

    Sollte ins Step Event der Spielfigur.
  • hi, ich habe einen lösung gefunden!

    und zwar:
    ins step event von der wall:

    (vorher checken ob das obj_player existiert)
    und dan

    GML-Quellcode

    1. if(y<(obj_player.y+30))
    2. {
    3. solid = false;
    4. }
    5. else
    6. {
    7. solid = true;
    8. }


    und das ins collision event mit der wall:

    GML-Quellcode

    1. if(other.solid ==true)
    2. {
    3. if (vspeed > 0 && !place_free(x,y+vspeed))
    4. {move_contact(270)}
    5. vspeed = 0
    6. }


    danke für die ganzen antworten und danke an johanski für den code :)