Map erstellen

  • GM 8

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

  • Also viel an deinem Code habe ich noch nicht verändert(ich muss erstmal dass mit dem View bewegen=Map erstellen hinkriegen) ich habe lediglich die Objekte verändert. (Die Datei darf ich aus gründen des Stehlens und der fast fertigen Beta nicht hochladen) Aber hier mal der Code:

    GML-Quellcode

    1. y_koord = 0;
    2. for(i=0;i<=view_wview;i+=16){
    3. var zufall;
    4. var x_koord;
    5. var y_koord;
    6. zufall = (random (4)-random(3))*16;
    7. x_koord = i; //x koordinate des Blocks
    8. if not(i=0){ //wenn das NICHT der erste Block ist
    9. y_koord =(floor(zufall/16)*16)+y_koord; //setze ihn auf zufallsposition + die Position des letzten gesetzten Blocks
    10. }else{
    11. y_koord = (floor(zufall/16)*16)+floor(200/16)*16; //ansonsten setze ihn auf eine unabhängige zufallsposition.// das 200 ist der abstand der Blöcke von dem oberen ende dr map.
    12. }
    13. instance_create(x_koord,y_koord,obj_ground_gras); //erstelle nun ein Objekt auf den Berrechneten Zufallskoordinaten.
    14. var y_fuellen;
    15. y_fuellen = floor(view_hview/16)*16; //diese Variable ist der momentane "pointer" in der Y ebene der immer nach oben geschoben wird (in - bereich)
    16. while (place_empty(x_koord,y_fuellen)) and (y_fuellen>0){ //von unten nach oben solange durchgehen bis ein Objekt gefunden oder die Spitze der Map erreicht wurde.
    17. instance_create(x_koord,y_fuellen,obj_ground); //dies ist die Füllung der Map (also alles was unter dem objekt gras Block ist.)
    18. y_fuellen+=-16;
    19. }
    20. }
    Alles anzeigen
    Grüße Stupe
  • GML-Quellcode

    1. y_koord = 0;
    2. div_max = 16;
    3. created_block = noone;
    4. for(i=0;i<=room_width;i+=16){
    5. var zufall;
    6. var x_koord;
    7. var y_koord;
    8. zufall = (random (4)-random(3))*16;
    9. x_koord = i; //x koordinate des Blocks
    10. if not(i=0){ //wenn das NICHT der erste Block ist
    11. y_koord =(floor(zufall/16)*16)+y_koord; //setze ihn auf zufallsposition + die Position des letzten gesetzten Blocks
    12. if(y_koord > created_block.y){ // fragt ab ob y_koord größer als die y position des letzten blocks ist
    13. if(y_koord-div_max > created_block.y){ // fragt ab ob die y_koord minus maximale differenz größer als die y position des letzten blocks ist
    14. y_koord = created_block.y + div_max; // setzt y_koord auf y position des letzten blocks pluss differenz
    15. }
    16. }else{
    17. if(y_koord < created_block.y){ // fragt ab ob y_koord kleiner als die y position des letzten blocks ist
    18. if(y_koord+div_max < created_block.y){ // fragt ab ob die y_koord pluss maximale differenz kleiner als die y position des letzten blocks ist des
    19. y_koord = created_block.y - div_max; // setzt y_koord auf y position des letzten blocks minus differenz
    20. }
    21. }
    22. }
    23. }else{
    24. y_koord = (floor(zufall/16)*16)+floor(200/16*16; //ansonsten setze ihn auf eine unabhängige zufallsposition.// das 200 ist der abstand der Blöcke von dem oberen ende dr map.
    25. }
    26. created_block = instance_create(x_koord,y_koord,obj_erde); //erstelle nun ein Objekt auf den Berrechneten Zufallskoordinaten.
    27. var y_fuellen;
    28. y_fuellen = floor(room_height/16)*16; //diese Variable ist der momentane "pointer" in der Y ebene der immer nach oben geschoben wird (in - bereich)
    29. while (place_empty(x_koord,y_fuellen)) and (y_fuellen>0){ //von unten nach oben solange durchgehen bis ein Objekt gefunden oder die Spitze der Map erreicht wurde.
    30. instance_create(x_koord,y_fuellen,obj_stein); //dies ist die Füllung der Map (also alles was unter dem objekt gras Block ist.)
    31. y_fuellen+=-16;
    32. }
    33. }
    Alles anzeigen

    hab die variable created_block hinzugefügt und da wird die y position des letzen blocks abgefragt
    mit der variable div_max kann somit der maximale abstand zwichen den blöcken bestimmt werden ...
    ---- wer fehler findet darf sie behalten ---

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

  • Du wirst später sehr wahrscheinlich extreme Performance probleme haben. Lös das doch mit einem Array. Damit wird alles einfacher abzufragen, es wird schneller und braucht weniger Arbeitspeicher. Wie man das macht kannst du dir das Programm im dateianhang ansehen und beliebig erweitern. (Ich arbeite nicht mehr an diesem Projekt.) Im draw event werden einfach nur die Sprites gezeichnet die auch nur nötig sind zu zeichnen. Bei z.b 5000 x 5000 Blöcken würde es kein sinn machen 25.000.000 Blöke zu zeichnen oder noch schlimmer: Der Pc führt für jedes Objeck die ganzen Aktionen aus.

    Hoffe das Hilft dir etwas :) Und hab dich auch zum Nachdenken angeregt

    [EDIT]:


    Habe noch einen richtig guten Map generator hinzugfügt
    Hier ist der Quelcode der eine Map in einem Array speichert:

    GML-Quellcode

    1. //0 = Leer
    2. //1 = Erde(oberste Schicht Gras)
    3. //2 = Stein
    4. //3 = Holz
    5. //4 = Kohle
    6. // Setzt die Leere Blöcke
    7. for (i=0; i<=500; i+=1)
    8. for (j=0; j<=500; j+=1)
    9. global.welt[i,j] = 0
    10. // Setzt alle Erdblöcke
    11. hoe = 60
    12. for (i=0; i<=500; i+=1)
    13. {
    14. //Setzt den Spieler in die richtige höhe.
    15. if (i = 250)
    16. {
    17. Spieler.y = (hoe - 2) * 32
    18. Spieler.x = (250 * 32)
    19. }
    20. for (j=hoe; j<=500; j+=1)
    21. {
    22. if (global.welt[i,j-(random(7) + 5)] = 0) //Stein oder Erde?
    23. m = 1 //Erde
    24. else
    25. m = 2 //Stein
    26. global.welt[i,j] = m //Ausgewähltes setzen
    27. }
    28. if (round(random(10)) = 0) //Ab und zu starke veränderungen.
    29. {
    30. zuf = -5 + random(10)
    31. hoe += zuf
    32. }
    33. if(round(random(1)) = 0) //Bei einer 50% Wahrsheinlichkeit wird sich die höhe verändern.
    34. { //Dies hat den Effekt das es später nicht so hubelig wird.
    35. zuf = -2 + random(4)
    36. hoe += zuf
    37. }
    38. }
    39. //Platziert die Kohlevorkommen
    40. for (v=0; v<=1200; v+=1)
    41. {
    42. pux = round(random(500)) //Zufällige x Position
    43. puy = round(random(500)) //Zufällige Y Position
    44. if (global.welt[pux,puy] = 2)/* Ist diese position im Stein? */{
    45. zufx = random(4) //Zufällige Breite
    46. zufy = random(4) //Zufällige Höhe
    47. for (i=0; i<=zufx; i+=1)
    48. for (j=0; j<=zufy; j+=1)
    49. {
    50. if not(round(random(2)) = 0) //Sorgt für ein natüliches Erzvorkommen
    51. global.welt[pux+i,puy+j] = 4 //Erzvorkomen erstellen
    52. }
    53. }else
    54. v-=1 //Erzvorkommen platzieren fehl geschlagen, erneut versuchen.
    55. }
    56. //Etwas Erde rundet das ganze ab
    57. for (v=0; v<=2800; v+=1)
    58. {
    59. pux = round(random(500)) //Zufällige x Position
    60. puy = round(random(500)) //Zufällige Y Position
    61. if (global.welt[pux,puy] = 2)/* Ist diese position im Stein? */{
    62. zufx = random(5) //Zufällige Breite
    63. zufy = random(5) //Zufällige Höhe
    64. for (i=0; i<=zufx; i+=1)
    65. for (j=0; j<=zufy; j+=1)
    66. {
    67. if not(round(random(2)) = 0) //Sorgt für ein natüliches Erdevorkommen
    68. global.welt[pux+i,puy+j] = 1 //Erde erstellen
    69. }
    70. }else
    71. v-=1 //Erdevorkommen platzieren fehl geschlagen, erneut versuchen.
    72. }
    Alles anzeigen


    [EDIT]: Hab jetzt irgendwie wieder lust weiterzumachen. Zum Glück hat sich das keiner runtergeladen. Den Script lasse ich aber drin.

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

  • Benutzer online 1

    1 Besucher