Blitze mit Draw zeichnen

  • GM 7

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

  • Blitze mit Draw zeichnen

    Hallo an Alle

    Ich habe zwei kleine Probleme mit mein Prog. Ich möchte einen Blitz mit der Draw-Funktion zeichnen, sobald meine Spieler zu nahe an die Teslaspulen kommt. Das habe ich soweit hinbekommen. Den Algorithmus für den Blitz habe ich von einem anderen Programm übernommen.
    Jetzt habe ich aber anscheinend einen Rechenfehler im Algorithmus, da mein Blitz nicht zu Player springt, sondern um 180° gedreht ist.
    Egal was ich auch unternommen habe um es richtig zu stellen, sind leider fehl geschlagen. Und da ich keine Mathe-Chenie bin, kann ich leider auch nicht die Formel so um setzten, das es passt.

    Hier mal den Allgorithums:

    Im obj_Blitz: Creat-Event:

    GML-Quellcode

    1. {
    2. global.Bl_A = 20; // Blitzauflösung. Je höher die Zahl, desto feiner der Blitz
    3. global.Aline = 0;
    4. global.Blitz_id = 0;
    5. Konstante = 1.570796326794896619;
    6. farbe[1] = make_color_rgb(140,155,213); // Farbe hell blau 00
    7. farbe[2] = make_color_rgb(67,77,127);// Farbe hell blau 01
    8. farbe[3] = make_color_rgb(44,50,86); // Farbe dunkel blau
    9. x1 = 0;// Blitz_Anfang_x
    10. y1 = 0;// Blitz_Anfang_y
    11. x2 = 0;// Blitz_Ende_x
    12. y2 = 0;// Blitz_Ende_y
    13. xm = 0;
    14. ym = 0;
    15. l = 0;
    16. a = 0;
    17. xf1 = 0;
    18. yf1 = 0;
    19. xf2 = 0;
    20. yf2 = 0;
    21. global.Aline[global.Bl_A+1] = y2
    22. }
    Alles anzeigen


    Im obj_Blitz: beginn-Step:

    GML-Quellcode

    1. x1 = global.Blitz_id.x;// Blitz_Anfang_x
    2. y1 = global.Blitz_id.y;// Blitz_Anfang_y
    3. x2 = obj_Player.x// Blitz_Ende_x
    4. y2 = obj_Player.y// Blitz_Ende_y
    5. Konstante = 1.570796326794896619;
    6. xm = x2-x1;
    7. ym = y2-y1;
    8. scr_Split(0,global.Bl_A);
    9. l = sqrt(xm*xm+ym*ym);
    10. a = arctan2(xm,ym);
    11. xf1 = cos(a);
    12. yf1 = sin(a);
    13. xf2 = cos(a+Konstante);
    14. yf2 = sin(a+Konstante);
    15. global.Aline[global.Bl_A+1] = y2
    Alles anzeigen


    Im obj_Blitz: Draw-Event:

    GML-Quellcode

    1. //Blitz erzeugen
    2. for (z=0; z<global.Bl_A; z+=1)
    3. {
    4. px1 = (z*l/global.Bl_A);
    5. py1 = global.Aline[z];
    6. px2 = (z+1)*l / global.Bl_A;
    7. py2 = global.Aline[z+1];
    8. pos_x1 = x1+px1*xf1+py1*xf2;
    9. pos_y1 = y1+px1*yf1+py1*yf2;
    10. pos_x2 = x1+px2*xf1+py2*xf2;
    11. pos_y2 = y1+px2*yf1+py2*yf2;
    12. draw_set_alpha(0.5);
    13. draw_set_color(farbe[1]);
    14. draw_line(pos_x1, pos_y1, pos_x2, pos_y2)
    15. draw_set_color(farbe[2]);
    16. draw_line(pos_x1+1, pos_y1+1, pos_x2+1,pos_y2+1)
    17. draw_set_color(farbe[3]);
    18. draw_line(pos_x1+2, pos_y1+2, pos_x2+2,pos_y2+2)
    19. draw_set_alpha(1);
    20. }
    Alles anzeigen


    Ich habe noch die GM-Datei mit angehängt. Damit ich es sehen könnt.

    Jetzt noch zu meinem zweiten Problem. Je länger die Blitze gezeichnet werden, desto langsamer wird mein Rechner. Wie kann ich das vermeiden.

    So ich hoffe das ich mich verständlich ausgedrückt habe.
    Ich hoffe es kommt keiner auf die Idee mir zu sagen das ich doch den Blitz als Sprite zeichnen soll. Auf diese Idee kam ich gleich am Anfang. Leider bin ich mit einen Sprite nicht so flexibel wie mir scheint. Ausser einer von euch lehrt mich eines Besseren. Bin immer für alles offen.

    Gruss Drachen :)

    Dienstag den 20.09.2009 - 14.00 Uhr

    Hi an Alle

    Da sich bis jetzt niemand geäussert hat, geh ich davon aus das keiner einen Tip für mich hat. Werde jetzt doch dem Sprite verwenden müssen.
    Wenn doch noch jemand einen Tip haben soll, schreib es einfach hier rein. An allen die es angeschaut haben vielen Dank.

    Gruss Drachen ?(
    Dateien

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