Kollisionsabfrage mit "solid" nur bei manchen Objekten

  • GM 8
  • Kollisionsabfrage mit "solid" nur bei manchen Objekten

    Hi
    also ich hab folgendes Problem bei meiner Jump'n'Run Engine. In meinem Skript steht, dass unter dem Charakter nach Blöcken mit Attribut "solid" gesucht wird und je nach true oder false der state "onGround" oder "inAir" ausgerufen wird. Komischerweise reagiert es aber nur bei einem Objekt, bei anderen Objekten, die auch Attribut solid haben, nicht.

    GML-Quellcode

    1. if (collision_rectangle(bbox_left+5,bbox_bottom,bbox_right-5,bbox_bottom+vspeed,solid,1,1)) // checks if Ground
    2. {
    3. nextState = "onGround"
    4. }else{
    5. if (keyPressedA = 0){
    6. nextState = "inAir"
    7. }else{
    8. nextState = "Heli"
    9. }
    10. }
    11. if (nextState != state) // organises state changes (inAir -> land)
    12. {
    13. if (nextState = "onGround") // change inAir -> onGround (landing)
    14. {
    15. script_execute(scr_land)
    16. }
    17. state = nextState
    18. }
    Alles anzeigen
  • Du hast für das Parameter obj "solid" eingesetzt. Er erwartet an dieser Stelle aber eine Instanz- oder Objekt-Id.
    "solid" trägt den Wert true oder false (und damit 1 oder 0), folglich überprüft er damit nur Kollisionen mit dem Objekt mit der Id 1 bzw. 0. Das ist höchstwahrscheinlich zufälligerweise dein normales Wandobjekt. Böser Bug.

    Willst du auf mehrere Objekte gleichzeitig überprüfen, solltest du stattdessen einen abstrakten Parent verwenden. Du erstellst einfach ein neues Objekt mit der Eigenschaft solid, das du selber nie im Raum platzierst. Alle Solid-Wandobjekte bekommen dieses dann als Parent zugewiesen. Bei der Abfrage fragst du dann nach eben diesem Parent-Object.
  • Benutzer online 1

    1 Besucher