geht place_meeting & Co nicht mit parents??

  • GM 8
  • geht place_meeting & Co nicht mit parents??

    Hallöchen,

    kriege jetzt bald eine Krise, fummel schon 3 Tage an meinem Code rum und er macht einfach genau das Gegenteil... *grummel* Brauche jetzt wirklich mal Hilfe.

    Ich habe ein obj_raumschiff, das beim Erstellen des Raumes schon da ist (überprüft). Ferner ein obj_verteiler, das etliche Asteroiden in dem Raum nach Zufallsprinzip verteilt. Nun sollen die Asteroiden schon übereinander zu liegen kommen dürfen, nur eben nicht genau da, wo das Raumschiff ist. Also, jeder Platz ist erlaubt, nur nicht beim Raumschiff.
    Nachdem alle Versuche mit "distance_to_object > 100" gescheitert sind, versuche ich es halt mit place_meeting, z.B. so:

    GML-Quellcode

    1. do
    2. {
    3. script_execute(zufall,rndx,rndy,0,0); //holt sich die Zufallszahl
    4. instance_create(rndx,rndy,asteroid); //"asteroid" ist hier eine Variable, der vorher ein Objekt zugewiesen wurde
    5. }
    6. until !(place_meeting(rndx,rndy,obj_raumschiff));


    Fazit: interessiert ihn nicht, er knallt die Asteroiden weiter munter auf's Raumschiff. Das gleiche Ergebnis bei "!place_empty", obwohl er da ja gar nichts übereinander legen dürfte. Aber auch das interessiert ihn wenig.

    Habe ich jetzt irgendwas falsch verstanden oder geht das vielleicht deshalb nicht, weil es sich um die Asteroiden um Objekte handelt, die ein Parent haben?
    Bin schon ganz verzweifelt - wer kann bitte helfen?
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Danke für die Mühe. Leider hilft das alles nicht wirklich weiter:

    Afroman schrieb:

    Oder...Frag bei dem Asteroiden einfach ob, ob er das Raumschiff berührt. Wenn ja, einfach den Asterioden zerstören und im Destroy-event einen neuen erstellen.
    Das versuche ich ja die ganze Zeit, herauszufinden, ob er das Raumschiff berührt. Und ich kann es das Destroy-Event nicht dafür benutzen, weil es voll ist mit Anweisungen, die die nur große optische Sachen auf den Schirm bringen, sondern auch Folgereaktionen auslösen. Muss doch auch irgendwie anders gehen....

    MasterXY schrieb:

    Außerdem verstehe ich nicht warum du so umständlich zu Zufallszahlen kommst.
    Was bitte ist daran so schwer zu verstehen? Ich würde es vielmehr nicht verstehen, wenn eine Zufallszahl aus etlichen Komponenten ermittelt wird, die insgeamt 9 Zeilen in Anspruch nehmen und diese Zufallszahl dauernd neu gebraucht wird, wenn man in jedem Script 7 bis 10 (!) mal diese 9 Zeilen reinkopieren würde. Dieses Chaos würde ich nicht verstehe, aber das kannst Du natürlich gerne so machen.

    Hat vielleicht noch jemand einen Tipp für mich, warum der Code oben da nicht geht? Vielleicht hab ich ja einen simplen Fehler drin, den ich nicht sehe - oder liegt es wirklich an den parents??
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Archie schrieb:

    GML-Quellcode

    1. do
    2. {
    3. script_execute(zufall,rndx,rndy,0,0); //holt sich die Zufallszahl
    4. instance_create(rndx,rndy,asteroid); //"asteroid" ist hier eine Variable, der vorher ein Objekt zugewiesen wurde
    5. }
    6. until !(place_meeting(rndx,rndy,obj_raumschiff));

    also wenn du das vorher mit distance_to_object auch so gemacht hast, ist es klar das es nicht Funktioniert hat.
    Da alles zwischen do { . . . } until erst ausgeführt wird, und dann die bedingung getestet wird.

    Ohne es jetzt getestet zu haben, und kann ich leider auch grade nicht, würde ich dir einfach mal empfehlen eine while schleife anstattl der do until Schleife zu benutzten, oder deine do-until Schleife etwas umschreiben. . . so würde ich es mal an deiner stelle veruschen:

    GML-Quellcode

    1. do
    2. {
    3. script_execute(zufall,rndx,rndy,0,0); //holt sich die Zufallszahl
    4. }
    5. until (distance_to_point(obj_raumschiff.x,obj_raumschiff.y,rndx,rndy) > 100);
    6. instance_create(rndx,rndy,asteroid); //"asteroid" ist hier eine Variable, der vorher ein Objekt zugewiesen wurde


    Wie gesagt ist grade gefühl, nicht getestet.

    Mfg.,
    Mokuyobi


    EDIT:

    Erstmal sry wie gesagt konnte derzeit wo ich gepostet habe nichts testen, und auch nichts in der Hilfe nachschlagen. Natürlich ist distance_to_point falsch, habe es mit point_distance vertauscht (was man auch erkennen konnte eigntl, da ich 2 Punkte und nicht nur einen angegeben habe (also 4 Koordinaten)).


    @Mokuyobi:: ich halte es für falsch, die create-Zeile erst nach der do-Routine zu erstellen, da das Ziehen einer Zufallszahl an sich ja noch keinen Vergleich mit der Platzierung des Objektes vornimmt. Dies geschieht ja erst durch create.
    Nein das ist es jedoch nicht, da alles was zwischen do { und } until (); steht wird ausgeführt, undzwar solange bis die Bedingung wahr ist. Es heißt ja zu Deutsch: "tu {. . . .} solange bis (. . .) wahr ist;"

    Sprich: Bei dir würde er solange neue Zufallszahlen ziehen - was ja sein soll - aber auch immer ein neuen Asteroiden gleich erstellen, undzwar solange bis der Asteroid den Spieler nicht mehr zu nah kommt / ihn nicht kreuzt.

    Wollte für das nicht extra einen neuen Post verschwenden. Ich hoffe du verstehst wie ich das meine, warum das instance_create hinter der do-until Schleife sollte. Denn ich glaube nicht das es Sinn und zweck war solange Asteroiden zu erstellen bist die Bedingung wahr ist, sondern nur dann wenn sie wirklich wahr ist ein Asteroid zu erstellen.

    Mfg.,
    Mokuyobi
    木曜日 (Mokuyōbi)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mokuyobi ()

  • So wie Mokuyobi es vorschlägt, müsste es klappen.

    Ich verstehe nicht was das mit den parents zu tuen hat. Wer erbt denn da von welchem Objekt?
    (Wenn ein Event in einem Sub-Objekt überschrieben wird, dann wird das Event des Sub-Objektes ausgeführt und nicht das vom Parent.)

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Testdatei mit Bitte um Korrektur angehängt

    Morgen,

    danke für Eure Bemühungen. Es geht aber einfach nicht. Weder so herum noch so herum. Es ist, als wenn das raumschiff komplett ignoriert wird. Ich weiß nicht, warum, aber ich habe jetzt mal eine kleine Test-Datei erstellt, wo nur einziger Planet 20 mal auf dem Bildschirm verteilt werden soll - ohne das Raumschiff zu verdecken. macht er auch nicht. Er denkt nicht daran, obwohl im Debugger klar erkennbar ist, daß ihm die Position des Raumschiffes durchaus bekannt ist.
    Der Fehler muß irgendwo bei mir liegen. Ich hänge deshalb mal die Test-Datei an die Mail hier mit der Bitte, daß sich jemand Sachkundiger dieser Datei einmal annimmt und herausfindet, wo der Fehler liegt...
    Danke schon mal im voraus,
    Archie

    @Mokuyobi:: ich halte es für falsch, die create-Zeile erst nach der do-Routine zu erstellen, da das Ziehen einer Zufallszahl an sich ja noch keinen Vergleich mit der Platzierung des Objektes vornimmt. Dies geschieht ja erst durch create.

    Hier die Datei:

    verteiler-test.zip
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Also zuerst mal kannst du nicht distance_to_point verwenden, da die Funktion dann von der Distanz des obj_verteilers zum Raumschiff ausgeht. Nimm point_distance. Außerdem sollte der Planet ja erst erstellt werden, wenn die Zahlen passen. Deshalb erstell die Instanz erst nach der do-Schleife (Diese wird ja solang ausgeführt, bis die Bedingung wahr ist), so wie Mokuyobi es schon gesagt hat.

    EDIT: Btw mit umständlich meinte ich, dass man Scripts ja auch direkt ausführen kann - also wie Funktionen. Also in deinem Fall "zufall(rndx,rndy,0,0)"
    Dateien

    © 2008 by Teamgrill Productions

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MasterXY ()

  • Danke für die editierte Datei. Ich hab ziemlich genau hinsehen müssen, um mitzubekommen, was da denn anders ist. Jetzt hab' ich den Fehler gefunden:
    es ist schlicht und ergreifend eine falsch gesetzte Klammer!
    Ich wundere mich die ganze Zeit, warum weder distance_to_objekt noch place_empty noch sonst irgendwas geht - dabei ist nur die Klammer schuld! Ich bin davon ausgegangen, daß mit der Anweisung "until blah blah blah" automatisch auch die do-Anweisung beendet ist und hab direkt danach die Klammer gesetzt. Dadurch konnte ja der Part "instance_create" gar nicht mehr mit diesen Zahlen ausgeführt werden! Menno.....

    Also, vielen herzlichen Dank für Eure Hilfe, jetzt funzt es endlich! Und jetzt geht es auch mit allen anderen Anweisungen innerhalb dieser Schleife plötzlich... :D
    So ein einzelnes, dummes Klämmerchen, tz, tz...

    Schönen Abend noch,
    Gruß Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Benutzer online 1

    1 Besucher