Alles übereinander, place_free oder place_empty interessiert ihn einfach nicht...

  • GM 8
  • Alles übereinander, place_free oder place_empty interessiert ihn einfach nicht...

    Ich kriege wirklich bald noch mal eine Krise - funktioniert das bloß bei mir alles immer nicht oder bei anderen auch nicht...??

    Zum neuen Problem: Ich habe einen "creator", der x-mal auf dem Spielfeld positioniert ist. Je nach Zufallsgenerator wird eine zufällige Position ermittelt, wo er das Ding platzieren soll. Diese soll natürlich LEER sein, versteht sich von selber. Also hab ich geschrieben:

    GML-Quellcode

    1. {
    2. do
    3. {
    4. x = random(288)+32;
    5. y = random(288)+32;
    6. }
    7. until (place_free(x,y))
    8. }


    Interessiert ihn aber nicht, er knallt mir trotzdem vieles übereinander. Auch mit place_empty(x,y) geht es nicht. Wenn ich die Raum-Werte eingebe, nicht obige, werden sogar die Randsteine und das Spieler-Männchen überschrieben. Bin ganz baff. Wo kann denn hier der Fehler liegen? Aufgerufen wird das alles im Create-Event des creator-Objectes.

    Wenn ein leerer Platz gefunden wurde, soll eigentlich der Creator durch verschiedene Objecte ersetzt werden. Aber die liegen dann natürlich auch alle z.T. übereinander. Soweit ich der Dokumentation entnehmen konnte, soll gerade place_empty dafür sorgen, daß nichts weiteres auf dem Spielfeld an dieser Stelle ist. Sitze ich vielleicht im falschen Event oder so was....?

    Ein verzweifelter
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Hallo Archie,

    mit der Funktion place_free(x,y) wird nur ein Punkt abgefragt. Hierbei können die "Creator" übereinander liegen.
    Um dies zu vermeiden könntest du einen Bereich abfragen
    war Quatsch, DragonGamer hat Recht.

    GML-Quellcode

    1. do {x = round(random(288))+32; y = round(random(288))+32;}
    2. until (collision_rectangle(x,y,x+sprite_width,y+sprite_height,creator,0,1))


    So würde ich es machen:
    Ein zweites Objekt das deine Objekte "Creator" erstellt. Im Create-Event des zweiten Objekts, kommt folgender Code:

    GML-Quellcode

    1. var anzahl,xx,yy,collrec,i;
    2. anzahl = 6; //Wie oft du das Objekt "Creator" brauchst
    3. for (i=0;i<anzahl;i+=1)
    4. {
    5. xx = round(random(288))+32;
    6. yy = round(random(288))+32;
    7. if (collision_rectangle(xx,yy,xx+32,yy+32,creator,0,1)) //Für die 32 hier musste halt die Höhe und Breite deines Sprites eintragen
    8. {
    9. i -= 1;
    10. }
    11. else
    12. {
    13. instance_create(xx,yy,creator);
    14. }
    15. }
    Alles anzeigen


    Hoffe, konnte helfen

    Grüße
    padi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von padi ()

  • padi schrieb:

    Hallo Archie,

    mit der Funktion place_free(x,y) wird nur ein Punkt abgefragt. Hierbei können die "Creator" übereinander liegen.
    Um dies zu vermeiden könntest du einen Bereich abfragen

    GML-Quellcode

    1. do {x = round(random(288))+32; y = round(random(288))+32;}
    2. until (collision_rectangle(x,y,x+sprite_width,y+sprite_height,creator,0,1))
    Da muss ich korigieren:
    place_free(x,y) Returns whether the instance placed at position(x,y) is collision-free

    Das bedeutet es prüft die Position anhand des Sprites des ausführenden Objektes.
    Dies bedeutet wenn der Creator ein korrektes Sprite hat (mit maske) sollte es auch mit dem vorherigen Code klappen.


    EDIT: @Henrik denke das ist ihm klar darum hat er's auch mit place_empty versucht was aber wegen dem Sprite auch nicht funktioniert hat.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

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

  • Vielen, vielen Dank für die Antworten, das wird mir weiterhelfen. Habe einfach nicht bedacht, daß da nur ein Punkt abgefragt wird. Werde das jetzt noch mal genauer daraufhin untersuchen.

    1000 Dank an alle!

    Wenn das Problem gelöst ist, ist mein erstes Spiel nämlich fast schon fertig. Wenn man mal von einigen Kleinigkeiten absieht... ;)

    Gruß Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para: