Wände zusammenfassen

    • Skript

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

    • Wände zusammenfassen

      Wer kennt das nicht? Man macht ein Spiel und benötigt ungeheuer viele obj_wall, obwohl man sie nur für Kollisionen braucht und den Rest zb mit Tiles darstellt. Bei größeren Rooms kann das durchaus zu Performance-Problemen führen. Aber man braucht ja auch nicht für jedes 32x32 Feld ein extra Objekt. Wieso nicht einfach die Wände, die nebeneinanderliegen zusammenfassen? Und genau das macht dieses Skript.
      Es verwandelt das erste Mauerbild ind die zusammengefasste 2. Version.

      Das Skript selbst:

      GML-Quellcode

      1. // merge_walls(obj)
      2. // Verbindet alle nebeneinanderliegende Objekte obj miteinander.
      3. var c;
      4. repeat (2){
      5. with (argument0)
      6. {
      7. var c;
      8. if (x-1>=0&&x+sprite_get_width(argument0.sprite_index)*image_xscale<=room_width&&object_index=argument0)
      9. {
      10. c=collision_point(x-1,y,argument0,false,true)
      11. if (c)
      12. {
      13. if (c.image_yscale=image_yscale&&c.object_index=argument0&&c.y=y)
      14. {
      15. x-=c.image_xscale*sprite_get_width(argument0.sprite_index);
      16. image_xscale+=c.image_xscale;
      17. with (c)
      18. instance_destroy();
      19. }
      20. }
      21. c=collision_point(x+sprite_get_width(argument0.sprite_index)*image_xscale,y,argument0,false,true)
      22. if (c)
      23. {
      24. if (c.image_yscale=image_yscale&&c.object_index=argument0&&c.y=y)
      25. {
      26. image_xscale+=c.image_xscale;
      27. with (c)
      28. instance_destroy();
      29. }
      30. }
      31. }
      32. }
      33. with (argument0)
      34. {
      35. var c;
      36. if (y-1>=0&&y+sprite_get_height(argument0.sprite_index)*image_yscale<=room_height&&object_index=argument0)
      37. {
      38. c=collision_point(x,y-1,argument0,false,true)
      39. if (c)
      40. {
      41. if (c.image_xscale=image_xscale&&c.object_index=argument0&&c.x=x)
      42. {
      43. y-=c.image_yscale*sprite_get_height(argument0.sprite_index);
      44. image_yscale+=c.image_yscale;
      45. with (c)
      46. instance_destroy();
      47. }
      48. }
      49. c=collision_point(x,y+sprite_get_height(argument0.sprite_index)*image_yscale,argument0,false,true)
      50. if (c)
      51. {
      52. if (c.image_xscale=image_xscale&&c.object_index=argument0&&c.x=x)
      53. {
      54. image_yscale+=c.image_yscale;
      55. with (c)
      56. instance_destroy();
      57. }
      58. }
      59. }
      60. }
      61. }
      Alles anzeigen

      © 2008 by Teamgrill Productions
    • Danke für den Skript! nach so etwas habe ich schon länger gesucht.

      Allerdings habe ich eine Frage:

      Ich habe den Skript einmal "drübergelaufen" und sehe da (das ist auch offensichtlich) dass du mit image_xscale und image_yscale arbeitest.
      Nun, ich wollte gleich Fragen ob sich die Objekte die nach dem Skript entstehen auch zur Kollissionsprüfung eignen.

      Ich habe bei mir schon länger ein Probem dass ich nicht lösen kann. Nach dem anwenden von image_xscale und image_yscale auf ein Objekt, hat sich der GM nach einer Kollissionprüfung mit dem jeweiligen Sprite aufgehängt.
      Da du ebenso diese befehle benutzt, wollte ich mal nachfragen ob du nicht auch solch ähnliche Probleme hattest.
    • Also die Kollisionserkennung sollte problemlos funktionieren. Ich verwende das Script bei Hard Recoil und da funktioniert alles wie es soll. Ich wüsste nicht warum sich der GM dadurch aufhängen soll, mir zumindest ist es nie passiert ;)

      © 2008 by Teamgrill Productions
    • MasterXY schrieb:

      Also die Kollisionserkennung sollte problemlos funktionieren. Ich verwende das Script bei Hard Recoil und da funktioniert alles wie es soll. Ich wüsste nicht warum sich der GM dadurch aufhängen soll, mir zumindest ist es nie passiert ;)

      Pff du hast das obj_wall also nicht gekillt? Schande über dich! :P

      Edit @ MasterXY: Wofür sollte man tausende for-schleifen brauchen? Wie wir ja gesehen haben, kann man ohne obj_wall wesentlich glücklicher werden als mit... :D

      © 2008 by Teamgrill Productions

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

    • Wie wir gesehen haben sind Objekte immer noch schneller als 1000 for-Schleifen :P

      EDIT @ Soul: Zb bei den Blutobjekten :D

      © 2008 by Teamgrill Productions

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