draw_primitive => Einfrieren

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

  • draw_primitive => Einfrieren

    ÄDIT: Hab es in GMC gepostet. Wurde in weniger als in einer Stunde gelöst.

    Ich wollte Letztens mein Spiel optimieren indem ich so wenig wie möglich draw_primitive_begin benutze. Jedoch als ich das umsetzen wollte, frierte mein Spiel beim ausführen der Codes ein. Also hier der Spagetticodes:

    Draw Event

    GML-Quellcode

    1. instance_deactivate_all(1)
    2. instance_activate_object(HomingMissile)
    3. draw_set_blend_mode(bm_add)
    4. draw_primitive_begin_texture(pr_trianglelist,global.laser_blue)
    5. for (i=0; i<instance_count; i+=1)
    6. {
    7. iii = instance_id[i];
    8. if instance_exists(iii)
    9. if iii.object_index == HomingMissile
    10. if iii.color=0
    11. tracer_draw_texture_primitve(9,iii)
    12. }
    13. draw_primitive_end()
    14. draw_primitive_begin_texture(pr_trianglelist,global.laser_red)
    15. for (i=0; i<instance_count; i+=1)
    16. {
    17. iii = instance_id[i];
    18. if instance_exists(iii)
    19. if iii.object_index == HomingMissile
    20. if iii.color=1
    21. tracer_draw_texture_primitve(9,iii)
    22. }
    23. draw_primitive_end()
    24. draw_set_blend_mode(bm_normal)
    25. instance_activate_all()
    Alles anzeigen




    Script: tracer_draw_texture_primitve (hier friert er ein)



    GML-Quellcode

    1. var xa,ya,xb,yb;
    2. var xda,yda,xdb,ydb;
    3. var xca,yca,xcb,ycb;
    4. var ab,de;
    5. xa=argument1.lastx[0]
    6. ya=argument1.lasty[0]
    7. xb=argument1.x
    8. yb=argument1.y
    9. ab=point_direction(xa,ya,xb,yb)
    10. de=argument0
    11. xda=xb+lengthdir_x(de/2,ab+90)
    12. yda=yb+lengthdir_y(de/2,ab+90)
    13. xdb=xb+lengthdir_x(de/2,ab-90)
    14. ydb=yb+lengthdir_y(de/2,ab-90)
    15. xca=xa+lengthdir_x(de/2,ab+90)
    16. yca=ya+lengthdir_y(de/2,ab+90)
    17. xcb=xa+lengthdir_x(de/2,ab-90)
    18. ycb=ya+lengthdir_y(de/2,ab-90)
    19. for(i=0;i<argument1.lastmax+1;i+=1)
    20. {
    21. xa=argument1.lastx[i]
    22. ya=argument1.lasty[i]
    23. ab=point_direction(xa,ya,xb,yb)
    24. xca=xa+lengthdir_x(de/2,ab+90)
    25. yca=ya+lengthdir_y(de/2,ab+90)
    26. xcb=xa+lengthdir_x(de/2,ab-90)
    27. ycb=ya+lengthdir_y(de/2,ab-90)
    28. draw_vertex_texture(xca,yca,1-i/argument1.lastmax,0)
    29. draw_vertex_texture(xdb,ydb,1-(i-1)/argument1.lastmax,1)
    30. draw_vertex_texture(xda,yda,1-(i-1)/argument1.lastmax,0)
    31. draw_vertex_texture(xca,yca,1-i/argument1.lastmax,0)
    32. draw_vertex_texture(xdb,ydb,1-(i-1)/argument1.lastmax,1)
    33. draw_vertex_texture(xcb,ycb,1-i/argument1.lastmax,1)
    34. xb=argument1.lastx[i]
    35. yb=argument1.lasty[i]
    36. xda=xca
    37. yda=yca
    38. xdb=xcb
    39. ydb=ycb
    40. }
    Alles anzeigen


    Noch ein paar Sachen bevor ihr fragt:

    1. das Deaktvieren der Instanzen sollte die For's in Draw Event kürzen. Was mehr Leistung am Ende her gibt.
    2. global.laser_blue und global.laser_red beinhalten Texturen und sind auch korrekt.
    3. tracer_draw_texture_primitve dient zum rendern von Spuren (mit zwei weiteren Scripts die beide getestet, verwendet und auch korrekt sind)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bernt ()

  • Wenn ich mir das so anschaue sehe ich 2 for-schlaufen in 2 for-schlaufen... könnte es sein dass dein Computer einfach nur überlastet ist weil er so viel tun muss? :D Sonst weiss ich nicht was das Problem sein könnte...

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Das glaub ich nicht Dragoon. GM macht das mit Objekten genau dasselbe. Der macht auch ein For das bis zu *Anzahl von Objekten geht*. Und der sortiert die dann noch nach ihrer Depth! Das was ich voher gemacht war das beim jedem der Hominglaser Objekte ein Draw event gemacht habe mit sowas ähnlich wie ich oben stehen hab. Und da ich noch einige Objekte bei meiner Methode deaktiviere wird das For kürzer. Also müsste sich bei meiner Methode die Leistung eher Verbesseren als Verschlechtern.

    ÄDIT: Noch etwas hinzugefügt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bernt ()

  • Benutzer online 1

    1 Besucher