Kollisionstest verläuft immer negativ ?!

  • Kollisionstest verläuft immer negativ ?!

    Also, ich hab in meinem Spiel folgenden (hierfür etwas abgespeckten) Code drin:

    GML-Quellcode

    1. target=instance_position(x+16,y+16,obj_ship);
    2. if(target!=noone)
    3. {
    4. if (target.owner!=owner)
    5. {
    6. //battle
    7. }
    8. }
    9. }
    10. else if(target==noone)
    11. {
    12. target=instance_position(x+16,y+16,obj_base);
    13. if (target!=noone)
    14. {
    15. if(target.owner==owner)
    16. {
    17. //basisbesuch
    18. }
    19. }
    20. }
    21. else if (target==noone)
    22. {
    23. target=instance_position(x+16,y+16,obj_planet);
    24. if (target!=noone)
    25. {
    26. if(missions>0)
    27. {
    28. //planetenbesuch
    29. }
    30. }
    31. }
    32. //zug beenden und an den nächsten spieler übergeben
    33. phase=1;
    34. if (global.currentpl+1<=global.spieler)
    35. {
    36. global.currentpl+=1;
    37. }
    38. else
    39. {
    40. global.currentpl=1;
    41. }
    Alles anzeigen


    Der Code wird ohne Murren angenommen (eventuelle Klammerfehler usw. kommen vom
    einfügen und kürzen :) ), aber die Abfrage verläuft, außer für das gegnerische
    Schiff immer negativ ?( . Ich hoffe, ihr könnt mir helfen, ich bin nämlich mit meinem
    Latein am Ende.

    Im Anhang ist der unveränderte Originalcode drin (Falls ich doch beim umschreiben nen Fehler
    rein gemacht habe)
    Dateien
    • code1.txt

      (2,55 kB, 170 mal heruntergeladen, zuletzt: )
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Wenn du nicht selber dafür sorgst, das target "noone" ist, wird sie diesen zustand nicht annehmen denke ich.
    Sollte sich keine Instance am abgefragten ort befinden, müsste ein negativer Wert ausgegben werden.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Äh, ich dachte "noone" ist das spezielle Objekt, das zurückgegeben wird,
    wenn instance_position kein ziel findet? ?(

    Hurra :D :D !
    Mir ist jetzt grade aufgefallen, was für einen dummen Fehler ich gemacht
    habe! Das Objekt, das diesen Code ausführt, ist ja selber Object_ship,
    deswegen kommt für erstes if immer true und für das Zweite immer false!

    Trotzdem ist jetzt noch die Frage offen, was nehm ich dann, wenn instance_position
    auch das eigene Objekt mit anzeigt? 8|
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • instance_position() gibt den index der instance aus. Der index ist einfach eine fortlaufende Nummer die der Reihe nach an jede instance im Raum, egal von welchem object, vergeben wird. Der index beginnt ca. bei 100000. Wenn du nun einen leeren raum machst und mit der maus eine instance eines objectes platzierst, wird diese instance im spiel die erste Nummer des index belegen. Jede weitere instance (egal ob von dir platziert oder vom spiel generiert) bekommt also nie nächste Nummer, egal ob die alten instancen noch da sind.
    Wenn der Befehl instance_position() an der besagten Position keine instance findet, gibt es glaube ich -4 wieder.

    Es gibt noch position_meeting(). dieser Befehl funktioniert genau so, allerdings gibt er nicht den index aus, sonder nur ob eine instance des besagten objectes an der entsprechenden position ist oder nicht (1 oder 0)

    Du kannst also dein Problem (das mir leider noch nicht ganz klar ist) auf mehrere möglichkeiten lösen.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • instance_position(x,y,obj) Returns the id of the instance of type obj at position (x,y). When multiple instances are at that position the first is returned. obj can be an object or the keyword all. If it does not exist, the special object noone is returned.
    ?( ?(
    Aber trotzdem vielen Dank, ich hab meinen Fehler noch gefunden. Um es kurz zu machen: Ich hatte einfach
    ein paar { } an der falschen Stelle... :whistling: :whistling:

    ...das mir leider noch nicht ganz klar ist...
    Tut mir leid, erklären war noch nie meine große Stärke (du solltest erst mal einen meiner Vorträge in der
    Schule hören... :D )
    ___________________________________________________________
    Beware of wild pointers
    ______Hinweis für Allergiker: Kann Spuren von Ironie enthalten_____
  • Benutzer online 2

    2 Besucher