Problem mit freien Plätzen

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit freien Plätzen

    Hallo!

    Ich habe ein Feld mit 8*8 Plätzen. Nun will ich mit einem Script eine variable Anzahl von Objekten platzieren (global.zielwert) wobei jedes Objekt an einen freien Platz soll. Ich teste es derzeit mit dem Wert von 64, also sollte jeder Platz gefüllt sein, wobei die Verteilung bei kleineren Werten natürlich zufällig sein sollte. Mein Script sieht so aus:

    GML-Quellcode

    1. if global.gameover = false{
    2. x = 280
    3. y = 128
    4. schrittweite = 80
    5. for (block = 0; block < global.zielwert; block += 1){
    6. xx = x + (schrittweite * floor(random(8)))
    7. yy = y + (schrittweite * floor(random(8)))
    8. for (i = 0; i < global.zielwert; i += 1){
    9. if place_meeting(xx,yy,obj_block){
    10. xx = x + (schrittweite * floor(random(8)))
    11. yy = y + (schrittweite * floor(random(8)))
    12. }else{
    13. instance_create(xx,yy,obj_block)
    14. break;
    15. }
    16. }
    17. }
    18. }
    Alles anzeigen


    Das Script wird beim Start des Raumes von einem Objekt einmal aufgerufen. Mein Problem: es werden nicht alle freien Plätze belegt. Wo ist mein Fehler?
  • Nimm die zweite For Schleife weg und sag ihm gleich:

    GML-Quellcode

    1. for(block = 0; block < global.zielwert; block += 1)
    2. {
    3. do
    4. {
    5. xx = x + (schrittweite * floor(random(8)))
    6. yy = y + (schrittweite * floor(random(8)))
    7. }
    8. until(place_empty(xx,yy))//oder until not place_meeting(obj_block)
    9. if place_empty(xx,yy)//oder if not place_meeting(obj_block)
    10. {
    11. instance_create(xx,yy,obj_block);
    12. }
    13. }
    Alles anzeigen

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Du willst position_free und nicht place_free. Bei letzterem wird die Kollisionsmaske der Instanz, von der du das Script aus aufrufst, verwendet. Bei _position die tatsächlichen Koordinaten.

    Ansonsten solltest du dir überlegen, ob du das ganze nicht mit einem Array oder ds_grid abstrahierst und dir dann eine Funktion schreibst, die diese Datenstruktur entsprechend malt. Es ist häufig keine gute Idee, grafische Darstellung derartig an die Spiellogik zu koppeln, wie im GM üblich.