Schleifen Koordinationsproblem

    Schleifen Koordinationsproblem

    hy


    also ich hab wieder mal ein problem mit der for schleife!
    besser gesagt mit der koordination.

    hier habe ich zb mehrere rechtecke gezeichnet untereinander.

    GML-Quellcode

    1. for (i = 0;i < 5;i++)
    2. {
    3. [b][/b]draw_rectangle(x+125,y+400+30*i,x+600,y+430+30*i,true);
    4. }



    die hier sind ohne abstand....
    mein problem ist wie macht man den abstand zwischen den rechtecken.?
    also bei denen untereinander liegenden hab ichs jetzt so geschafft

    GML-Quellcode

    1. for (i = 0; i < 5;i++)
    2. {
    3. draw_rectangle(x+125,y+400+30+70*i,x+600,y+430+30+70*i,true);
    4. }

    da macht er einen 40 pixel hohen abstand zwischen jeden rechteck. aber wieso 40 pixel und nicht die 70 pixel die ich angegeben habe? anscheinend ist das die differenz von 70-30?

    aber wenn ich es auf der x koordinate mache hab ich noch mehr probleme.
    wenn ich das dann zb so machen würde x+125+50+120*i dann verschiebt er erstens das rechteck (aber er macht dann schon einen abstand)also ist es nicht mehr an der posiition wo es sein sollte.


    kann mir das bitte jemand genau erklären.wie man den abstand jetzt macht.
    Hallo,
    Ich glaub es wäre besser und zudem übersichtlicher wenn du die Koordinaten als variable in (und ausserhalb) der Schleife deklarierst.

    GML-Quellcode

    1. var x1 = x + 125;
    2. var y1 = y + 400;
    3. var x2 = x + 600;
    4. var y2 = y + 430;
    5. var abstand_x = 70 + (x2 - x1);
    6. var abstand_y = 70 + (y2 - y1);
    7. for (var i = 0; i < 5; i++)
    8. {
    9. var xx1 = x1 + i * abstand_x;
    10. var yy1 = y1 + i * abstand_y;
    11. var xx2 = x2 + i * abstand_x;
    12. var yy2 = y2 + i * abstand_y;
    13. draw_rectangle(xx1, yy1, xx2, yy2,true);
    14. }
    Hi

    Hier habe ich mal ein Script geschrieben, mit Anlehnung an Simon Gust seinen Code.
    Script:
    Scriptname: scr_Rechteck_x1_y1_x2_y2_ax_ay_an

    GML-Quellcode

    1. /// Rechtecke mit Abstand zeichnen)
    2. // Script im Draw Event aufrufen
    3. var x1, y1, x2, y2; // größe vom Rechteck, ausgehend vom Koordinatensystem
    4. var ax, ay; // x und y-Abstand zum Rechteck
    5. var an // Anzahl der Rechtecke
    6. var zx, zy // Zähler für die For Next Schleife
    7. x1 = argument0;
    8. y1 = argument1;
    9. x2 = argument2;
    10. y2 = argument3;
    11. ax = argument4;
    12. ay = argument5;
    13. an = argument6;
    14. ax = ax + (x2 - x1); // Berechnung des Abstands in X-Richtung
    15. ay = ay + (y2 - y1); // Berechnung des Abstands in Y-Richtung
    16. for (zy = 0; zy < an; zy +=1)
    17. {
    18. for (zx = 0; zx < an; zx +=1)
    19. {
    20. draw_rectangle(x1,y1,x2,y2, true);
    21. x1 = x1+ ax
    22. x2 = x2+ ax
    23. }
    24. x1 = argument0;
    25. x2 = argument2;
    26. y1 = y1+ ay;
    27. y2 = y2+ ay;
    28. }


    Das Script rufts du dann im dein Draw Event auf:
    Draw Event:

    GML-Quellcode

    1. scr_Rechteck_x1_y1_x2_y2_ax_ay_an(100,100,200,200,20,20,4);


    Die ersten 4 Zahlen sind wie bein normalen Rechteck auch, die Koordinaten.
    Die nächsten 2 Zahlen sind der Abstand zu den Rechtecken. 1 Zahl X-Abstand, 2 Zahl Y-Abstand
    Die letzte Zahl sind wieviel Rechtecke gezeichnet werden sollen.
    Man kann den Script auch noch ändern das er in y-Richtung eine andere Anzahl von Rechtechtecken zeichnet.

    Bein den jetzigen Script werden jetzt wie oben geschrieben eine 4 x 4 Reihe Rechtecke gezeichnet mit einen Abstand von x = 20 und y = 20.
    So ich hoffe es hilft dir.

    Gruß Drachen

    Hy
    Danke für deine Antwort. Aber könntest du es mir mit meinem Code erklären,wie man zwischen den Rechtecken einen Abstand macht.Bitte
    Schau Ich habs jetzt übersichtlicher gemacht.

    im create event

    GML-Quellcode

    1. x = 0;
    2. y = 0;
    3. j = 0;
    4. repeat(2)
    5. {
    6. global.name[j]=get_string("Name","");
    7. global.zahl[j]=get_string("Zahl","");
    8. j++
    9. }


    draw event

    GML-Quellcode

    1. var x1,x2;
    2. var y1,y2;
    3. var ax;
    4. ax = 0;
    5. x1 = x+300;
    6. x2 = x+550;
    7. y1 = y+500;
    8. ax = ax+(x1-x2);
    9. for (j = 0;j<2;j++)
    10. {
    11. draw_rectangle(x1+ax*j,y1,x2+ax*j,+real(global.zahl[j]),1);
    12. }


    Jetzt zeichnet er zwei Rechtecke nebeneinander.Aber ich will einen Abstand zwischen den beiden Rechtecken.


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „acidrain833“ ()

    Hi

    Ok ich versuche es dir zu erklären.

    Als aller erstes ist dein Abstand ax = 0, sprich da ist gar kein Abstand.
    Zweitens liegt der Fehler in deiner Berechnung ax = ax+(x1-x2). Du gehst damit in den Minusbereich ax = 0+(300-550).
    Wenn du ax einen Abstand zuweist und die Berechnung wie folgst eingibst ax=ax+(x2-x1), funktioniert deine Code ohne Probleme.

    Gruß Drachen
    @Drachen

    Thx für die Antwort

    ax = 0 hab ich gemacht weil das objekt direkt in der mitte des raumes erstellt wird und deshalb geht die berechnung dann in den minus bereich damit es nicht mittig sondern weiter links anfängt zu zeichnen.