copy's nützliche Scripte

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

    • Sorry, das ich den Thread nochmal herhole, aber das hier würde ich euch doch gerne noch zeigen.
      Das Script löscht eine bestimmte Zeile aus einer Datei, bzw. schreibt diese neu ohne die Zeile.

      Beispiel:

      GML-Quellcode

      1. file_text_delete_line("file.txt",1) //Löscht Zeile 1 aus file.txt!

      Spoiler anzeigen

      GML-Quellcode

      1. //"Löscht" Zeile arg1 aus der Datei arg0.
      2. //Die Datei wird ohne die genannte Zeile neu geschrieben.
      3. //Returns: Die gelöschte Zeile (Inhalt), falls man sie noch braucht.
      4. _tempstore = ""
      5. _zl = 0
      6. _zz = 0
      7. _str = ""
      8. _f=file_text_open_read(argument0);
      9. while !file_text_eof(_f) {
      10. _tempstore = _tempstore+"
      11. "+file_text_read_string(_f);
      12. file_text_readln(_f);
      13. _zl += 1}
      14. file_text_close(_f);
      15. _g=file_text_open_read(argument0);
      16. _zz=_zl-argument1+1;
      17. if (_zz>0) and (_zz<_zl+1) {
      18. while _zl>_zz {file_text_readln(_g);
      19. _zl=_zl-1}
      20. _str=file_text_read_string(_g);
      21. file_text_close(_g);
      22. _tempstore = string_replace_all(string_replace(_tempstore,"
      23. ",""),"
      24. "+_str,"");
      25. _h=file_text_open_write(argument0);
      26. file_text_write_string(_h,_tempstore);
      27. file_text_close(_h);
      28. return _str } else {
      29. show_message("Error: Die zu löschende Zeile liegt außerhalb der Datei.")}
      Alles anzeigen
    • Zufall mit versch. Chancen

      Manchmal hat man sowas in der Art: Es soll ein Gegenstand erstellt werden, und zwar je nach Zufall:
      Typ 0: mit 15% Chance, oder Typ 1 mit 25% Chance, oder Typ 2 mit 40% Chance, oder Typ 3 mit 20% Chance
      Wenn man folgendes Miniscript "choice" verwendet, kann man dafür dann schreiben:

      Beispiel

      GML-Quellcode

      1. choice(15,40,80,100) // würfelt random(99) und ergibt 0 wenn <=15, 1 bei <=40, 2 bei <=80, oder 3 bei <=100

      Spoiler anzeigen

      GML-Quellcode

      1. var r,i;
      2. r=random(100);
      3. for (i=0;i<16;i+=1) if (r<= argument[i]) return i;

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

    • Auch mal was von mir...
      nichts besonderes, bekommt jeder mit ein bisschen denken selber hin, aber ich denke er wird doch ein paar leuten praktisch sein.

      Dier script sorgt dafür das man zb. in einen Platformer bergauf und bergab gehen kann.

      Stepevent move_hills(höhe,speed,hsh) passend, oder? :P
      Höhe gibt an wie hoch man gehen kann, kleiner wert=hoch.
      speed kann man enfach auf die geschindichkeit setzten, also "speed"
      hsh muss an die größe des objectes angepasst werden. Generell abstand zwischen center des sprite biss zu den füßen/boden. (Ihr wisst was ich meine)

      Spoiler anzeigen

      GML-Quellcode

      1. var xx, sp, h;
      2. xx=argument
      3. sp=argument1
      4. h=argument2
      5. if (place_free(x+xx,y-h))
      6. {
      7. x-=sp;
      8. y-=sp;
      9. }
      10. else if (place_free(x-xx,y-h))
      11. {
      12. x+=sp;
      13. y+=sp;
      14. }
      Alles anzeigen

      Nicht perfekt, sollte aber irgendwelchen auf die Beine helfen! :D

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

    • Und noch was von mir:

      Da paths im bereich motion nicht so sonderlich parktisch sind, habe ich ein paar scripts gemacht, mit denen man viele schöne andere sachen damit machen kann

      draw_path_width:
      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. draw_path_width(path,width,prec)
      4. prec: between 1 and 0.0001, smaller=better; higher=faster
      5. */
      6. var xxp, yyp, xx, yy, i, prec;
      7. i=0
      8. prec=argument2
      9. xxp=path_get_x(argument,0)
      10. yyp=path_get_y(argument,0)
      11. xx=path_get_x(argument,0)
      12. yy=path_get_y(argument,0)
      13. while (i<=1+prec){
      14. xxp=xx
      15. yyp=yy
      16. xx=path_get_x(argument,i)
      17. yy=path_get_y(argument,i)
      18. draw_line_width(xx,yy,xxp,yyp,argument1)
      19. i+=prec
      20. }
      Alles anzeigen

      ist das gegenstück zu draw_line_width, nur als path...

      und weil es so schön ist, gleich noch mal:

      collision_path:
      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. collision_path(path,prec_of_line,obj,prec,notme)
      4. prec_of_line: between 1 and 0.0001, smaller=better; higher=faster
      5. */
      6. var xxp, yyp, xx, yy, i, prec, col;
      7. col=false
      8. i=0
      9. prec=argument1
      10. xxp=path_get_x(argument,0)
      11. yyp=path_get_y(argument,0)
      12. xx=path_get_x(argument,0)
      13. yy=path_get_y(argument,0)
      14. while (i<=1+prec){
      15. xxp=xx
      16. yyp=yy
      17. xx=path_get_x(argument,i)
      18. yy=path_get_y(argument,i)
      19. if collision_line(xx,yy,xxp,yyp,argument2,argument3,argument4) col=true
      20. i+=prec
      21. }
      22. return col
      Alles anzeigen
      Ist vom code her fasst das selbe

      EDIT: gleich noch was:

      path_parabel:
      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. returns a path, so you can draw it with draw_path
      4. path_parabel(x1,y1,x2,y2,x3,y3)
      5. x2,y2 = vertex
      6. returns = a path
      7. */
      8. var x1,y1,x2,y2,x3,y3,p;
      9. x1=argument
      10. y1=argument1
      11. x2=argument2
      12. y2=argument3
      13. x3=argument4
      14. y3=argument5
      15. p=path_add()
      16. path_add_point(p,x1,y1,1)
      17. path_add_point(p,x2,y2,1)
      18. path_add_point(p,x3,y3,1)
      19. path_set_closed(p,false)
      20. path_set_kind(p,1)
      21. return p
      Alles anzeigen


      und gleich noch mal eine andere version für eine parabel. Diese ist parktisch wenn man Seile zeichen will:

      path_parabel2:
      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. returns a path, so you can draw it with draw_path
      4. path_parabel2(x1,y1,x2,y2,l)
      5. l = lenght
      6. returns = a path
      7. */
      8. var x1,y1,x2,y2,l,p;
      9. x1=argument
      10. y1=argument1
      11. x2=argument2
      12. y2=argument3
      13. w=argument4
      14. p=path_add()
      15. path_add_point(p,x1,y1,1)
      16. if point_distance(x1,y1,x2,y2)<w path_add_point(p,(x1+x2)/2,w-point_distance(x1,y1,x2,y2)+(y1+y2)/2,1)
      17. path_add_point(p,x2,y2,1)
      18. path_set_closed(p,false)
      19. path_set_kind(p,1)
      20. return p
      Alles anzeigen


      Fortsetztung folgt..

      EDIT2: fehler im collision script...

      MfG SDX :P

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von SDX ()

    • Weil es fast aufs gleiche hinaus läuft? Wer Hilfe sucht, schaut im Normalfall eh in beides =D

      Übrigens, das path_collision find ich ganz nett ^^
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • Eine kombination von ein paar der pathscripts:


      draw_rope: draw_rope(x1,y1,x2,y2,lenght,width,prec)

      x1,y1=das eine ende
      x2,y2=das andere ende
      lenght=die länge des Seils
      width=die dicke des Seils
      prec=präzision, so 0.05 sollte gut sein

      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. draw_rope(x1,y1,x2,y2,lenght,width,prec)
      4. prec: between 1 and 0.0001, smaller=better; higher=faster
      5. */
      6. var xxp, yyp, xx, yy, i, prec, x1, y1, x2, y2, l, p, prec;
      7. x1=argument
      8. y1=argument1
      9. x2=argument2
      10. y2=argument3
      11. w=argument4
      12. th=argument5
      13. prec=argument6
      14. p=path_add()
      15. path_add_point(p,x1,y1,1)
      16. if point_distance(x1,y1,x2,y2)<w path_add_point(p,(x1+x2)/2,w-point_distance(x1,y1,x2,y2)+(y1+y2)/2,1)
      17. path_add_point(p,x2,y2,1)
      18. path_set_closed(p,false)
      19. path_set_kind(p,1)
      20. i=0
      21. xxp=path_get_x(p,0)
      22. yyp=path_get_y(p,0)
      23. xx=path_get_x(p,0)
      24. yy=path_get_y(p,0)
      25. while (i<=1+prec){
      26. xxp=xx
      27. yyp=yy
      28. xx=path_get_x(p,i)
      29. yy=path_get_y(p,i)
      30. draw_line_width(xx,yy,xxp,yyp,th)
      31. i+=prec
      32. }
      Alles anzeigen


      ja, paths sind doch zu was nutze!

      Ein neuer script:

      draw_rope_texture(x1,y1,x2,y2,lenght,width,prec,tex)
      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. draw_rope_texture(x1,y1,x2,y2,lenght,width,prec,tex)
      4. prec: between 1 and 0.0001, smaller=better; higher=faster
      5. */
      6. var xxp, yyp, xx, yy, i, prec, x1, y1, x2, y2, l, p, prec, partlen, rot, tex;
      7. // die variable extra gibt es für den fall das der abstand zwischne x1,y1 und x2,y2 größer als lenght ist..
      8. x1=argument
      9. y1=argument1
      10. x2=argument2
      11. y2=argument3
      12. w=argument4
      13. th=argument5
      14. prec=argument6
      15. tex=argument7
      16. partlen=w*prec
      17. p=path_add()
      18. path_add_point(p,x1,y1,1)
      19. if point_distance(x1,y1,x2,y2)<w path_add_point(p,(x1+x2)/2,w-point_distance(x1,y1,x2,y2)+(y1+y2)/2,1)
      20. path_add_point(p,x2,y2,1)
      21. path_set_closed(p,false)
      22. path_set_kind(p,1)
      23. i=0
      24. xxp=path_get_x(p,1)
      25. yyp=path_get_y(p,1)
      26. xx=path_get_x(p,0)
      27. yy=path_get_y(p,0)
      28. texture_set_blending(false)
      29. texture_set_repeat(true)
      30. while (i<=1+prec){
      31. xxp=xx
      32. yyp=yy
      33. xx=path_get_x(p,i)
      34. yy=path_get_y(p,i)
      35. rot=point_direction(xx,yy,xxp,yyp)
      36. //hier wirds interressant
      37. draw_primitive_begin_texture(pr_trianglefan,tex);
      38. draw_vertex_texture(xx+lengthdir_x(partlen/2,rot)+lengthdir_x(th/2,rot-90),
      39. yy+lengthdir_y(partlen/2,rot)+lengthdir_y(th/2,rot-90),0.5,0.5);
      40. draw_vertex_texture(xx,yy,0,0);
      41. draw_vertex_texture(xx+lengthdir_x(partlen,rot),yy+lengthdir_y(partlen,rot),1,0);
      42. draw_vertex_texture(xx+lengthdir_x(partlen,rot)+lengthdir_x(th,rot-90),
      43. yy+lengthdir_y(partlen,rot)+lengthdir_y(th,rot-90),1,1);
      44. draw_vertex_texture(xx+lengthdir_x(th,rot-90),yy+lengthdir_y(th,rot-90),0,1);
      45. draw_vertex_texture(xx,yy,0,0);
      46. draw_primitive_end();
      47. //und hier endet es auch schon wieder...
      48. i+=prec
      49. }
      Alles anzeigen


      und noch draw_paht_texture

      Spoiler anzeigen

      GML-Quellcode

      1. /*
      2. by SDX
      3. draw_paht_texture(path,width,prec,tex)
      4. prec: between 1 and 0.0001, smaller=better; higher=faster
      5. */
      6. var xxp, yyp, xx, yy, i, prec, l, p, prec, partlen, rot, tex, extra;
      7. // die variable extra gibt es für den fall das der abstand zwischne x1,y1 und x2,y2 größer als lenght ist..
      8. p=argument
      9. th=argument1
      10. prec=argument2
      11. tex=argument3
      12. w=path_get_length(p)
      13. partlen=w*prec
      14. i=0
      15. xxp=path_get_x(p,1)
      16. yyp=path_get_y(p,1)
      17. xx=path_get_x(p,0)
      18. yy=path_get_y(p,0)
      19. texture_set_blending(false)
      20. texture_set_repeat(true)
      21. while (i<=1-prec){
      22. i+=prec
      23. xxp=xx
      24. yyp=yy
      25. xx=path_get_x(p,i)
      26. yy=path_get_y(p,i)
      27. rot=point_direction(xx,yy,xxp,yyp)
      28. draw_primitive_begin_texture(pr_trianglefan,tex);
      29. draw_vertex_texture(xx+lengthdir_x(partlen/2,rot)+lengthdir_x(th/2,rot-90),
      30. yy+lengthdir_y(partlen/2,rot)+lengthdir_y(th/2,rot-90),0.5,0.5);
      31. draw_vertex_texture(xx,yy,0,0);
      32. draw_vertex_texture(xx+lengthdir_x(partlen,rot),yy+lengthdir_y(partlen,rot),1,0);
      33. draw_vertex_texture(xx+lengthdir_x(partlen,rot)+lengthdir_x(th,rot-90),
      34. yy+lengthdir_y(partlen,rot)+lengthdir_y(th,rot-90),1,1);
      35. draw_vertex_texture(xx+lengthdir_x(th,rot-90),yy+lengthdir_y(th,rot-90),0,1);
      36. draw_vertex_texture(xx,yy,0,0);
      37. draw_primitive_end();
      38. }
      Alles anzeigen

      MfG SDX

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

    • Hab mal wieder zwei Scripts hinzugefügt, die vielleicht ganz nützlich sein könnten: ds_list_foreach und draw_line_aa. Außerdem hat strings_get jetzt ein Update bekommen, weil er schon ziemlich alt war. Notiz an mich: Wenn ich noch mehr Skripte hinzufügen sollte, nicht in den Post einbauen :P
    • Ich habe da noch mal was gefunden.. ne handvoll Skripte..
      Nun, primär für 3D Landschaften interessant.

      Ein mal background_create_perlin Script, der macht eine Perlin Textur. Perfekt für zufällige Landschaften (nutze ihn in Weltensegler zur Erstellung der Lanschaft)
      Sieht dann so aus:

      Nun, perlin halt.

      Dann wäre da noch ein generate_shadow Script. Dieser macht aus einer highmap ( in form eines grids ) eine Shadowmap. Also einen Background, den man später auf die Textur der Lanschaft legen kann. Der Effekt ist dann, dass Berge dann auf der einen Seite heller sind als auf der anderen, Schatten halt.

      Und zu guter letzt ein ds_grid_blur script. Der algo hierfür ist boxblur. Bei einer 3fachen Anwendung kommt man sehr nah (glaube 0.7% unterschied) an Graussianblur ran. Perfekt wenn man die Daten eines Grids, die zb eine Highmap beschreiben, smoothen will.

      Keines der Scripte ist für Step o.Ä. events gedacht. Dafür sind die einfach viel zu langsam. Haut sie in den Ladevorgang ;)


      [hide=background_create_perlin]

      GML-Quellcode

      1. /*
      2. creates a perlin texture
      3. background_create_perlin(
      4. (real) size,
      5. (real) count,
      6. (real) octaves,
      7. (real) weight);
      8. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      9. | |
      10. | Example: |
      11. | background_create_perlin(128,5,5,2); |
      12. |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
      13. return value: background id
      14. by SDX
      15. */
      16. var a,b,c,count,c_size,oct,surf,res,size,gew,back;
      17. size = argument0;
      18. count = argument1;
      19. oct = argument2/size*100;
      20. gew = argument3;
      21. for (c=0;c<count;c+=1) {
      22. c_size = 128/((c*oct)+1);
      23. surf[code=c] = surface_create(c_size,c_size);
      24. surface_set_target(surf[code=c]);
      25. // fill with pure randomness
      26. for(a=0;a<c_size;a+=1) {
      27. for(b=0;b<c_size;b+=1) {
      28. draw_point_color(a,b,make_color_hsv(0,0,irandom(255)) );
      29. }
      30. }
      31. surface_reset_target();
      32. }
      33. // jetzt ham wa $count surfaces verschiedener gr��en. Also alles zu einem machen
      34. res = surface_create(size,size);
      35. surface_set_target(res);
      36. texture_set_interpolation(true);
      37. draw_surface_stretched(surf[0],0,0,size,size);
      38. for (c=1;c<count;c+=1) {
      39. draw_surface_stretched_ext(surf[code=c],0,0,size,size,-1,(1/count)*gew);
      40. surface_free(surf[code=c]);
      41. }
      42. surface_reset_target();
      43. back = background_create_from_surface(res,0,0,size,size,0,0);
      44. surface_free(res);
      45. return back;
      Alles anzeigen
      [/hide]

      [hide=generate_shadow]

      GML-Quellcode

      1. /
      2. /*
      3. creates a shadowmap from a grid
      4. generate_shadow(
      5. (ds_grid) input,
      6. (real) angle,
      7. (real) light);
      8. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      9. | |
      10. | Example: |
      11. | generate_shadow( highmap_grid, 45, 2); |
      12. |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
      13. return value: background id
      14. by SDX
      15. */
      16. var grid, size, array, surface, angle, lenght, vx, vy, back, shadow_blur, scale, color, max_color, b_grid;
      17. max_color = c_black;
      18. draw_set_alpha(1);
      19. grid = argument0;
      20. size = ds_grid_width(grid);
      21. b_grid = ds_grid_create(size,size);
      22. surface = surface_create(size,size);
      23. surface_set_target(surface);
      24. draw_clear(c_white);
      25. draw_set_color(c_white);
      26. draw_rectangle(0,0,size,size,0)
      27. for (a=0;a }
      28. }
      29. ds_grid_blur(b_grid,2);
      30. for (a=0;a for (b=0;b c = ds_grid_get(b_grid,a,b);
      31. c = make_color(c,c,c)+(255-max_color)
      32. if (color_get_red(c)) {
      33. c = $ffffff;
      34. }
      35. draw_point_color(a,b,c);
      36. }
      37. }
      38. surface_reset_target();
      39. ds_grid_destroy(b_grid);
      40. back = background_create_from_surface(surface, 0, 0, size, size, 0, 0);
      41. surface_free(surface);
      42. return back;
      Alles anzeigen
      [/hide]
      [hide=ds_grid_blur]

      GML-Quellcode

      1. /*
      2. applies a box blur filter on a ds_grid*
      3. ds_grid_blur(
      4. (ds_grid) input,
      5. (real) num);
      6. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      7. | |
      8. | Example: |
      9. | ds_grid_blur( grid, 2); |
      10. |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
      11. return value: input grid
      12. by SDX
      13. */
      14. var size, array, grid;
      15. grid = argument0;
      16. size = ds_grid_width(grid);
      17. repeat argument1 {
      18. for (a=1;a for (b=1;b m = mean(ds_grid_get(grid,a-1,b), ds_grid_get(grid,a+1,b), ds_grid_get(grid,a,b+1), ds_grid_get(grid,a,b-1))
      19. ds_grid_set(grid,a,b,m);
      20. }
      21. }
      22. }
      23. return grid;
      Alles anzeigen
      [/hide]


      An dieser stelle kann ich auch noch mal verraten, dass ich demnächst auch den Rest von Weltensegler und all meinen Projekten nach brauchbaren Scripten durchforste. Denk mir auch was aus, um die alle irgendwo geordnet unterbringen zu können.

      EDIT: für den schattenscript fehlt n weiterer script: angle_difference(angle1, angle2)

      GML-Quellcode

      1. return ((((argument0 - argument1) mod 360) + 540) mod 360) - 180;


      EDIT 5.2.2011: warum sagt niemand was? Der Schattenscript ist ja total in fetzen gewesen -> gefixed

      EDIT 24.3.2011: gleiches galt auch für Perlinscript

      Beispiel für Perlin: perlin_example.zip

      MfG SDX

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von SDX ()

    • Hrmpf ich will auch ma :3

      Ein einfaches View skript das auch mit der Maus agiert.
      Einfach mal testen ;)
      Achja beim benutzten den view kein object zuordnen!

      Spoiler anzeigen

      GML-Quellcode

      1. /////////////////////////////////////////////
      2. //By Tice
      3. //Example view_player(0, obj_player, mouse_x, mouse_y);
      4. //argument0 = View
      5. //argument1 = Object
      6. //argument2 = xx
      7. //argument3 = yy
      8. ////////////////////////////////////////
      9. var v, v1, xx, yy, x1, y1, rad_x, rad_y, pm, eye_x, eye_y;
      10. v = view_wview[argument0] / 2;
      11. v1 = view_hview[argument0] / 2;
      12. xx = argument1.x + (sprite_get_width(argument.sprite_index) / 2);
      13. yy = argument1.y + (sprite_get_height(argument.sprite_index) / 2);
      14. x1 = sprite_get_width(argument1.sprite_index) / 2;
      15. y1 = sprite_get_height(argument1.sprite_index) / 2;
      16. rad_x = x1 * (point_distance(x + x1, y + y1, argument2, argument3) / 100);
      17. rad_y = y1 * (point_distance(x + x1, y + y1, argument2, argument3) / 100);
      18. pm = point_direction(x + x1 , y + y1, argument2, argument3);
      19. eye_x = x1 + lengthdir_x(rad_x, pm);
      20. eye_y = y1 + lengthdir_y(rad_y, pm);
      21. view_xview[argument0] = xx + eye_x - v;
      22. view_yview[argument0] = yy + eye_y - v1;
      Alles anzeigen
      :saint:
    • Und jetzt noch was von mir

      Gravitation:
      Spoiler anzeigen

      GML-Quellcode

      1. /***************************************************
      2. Exampel gravity(0,1)
      3. argument 0 ist die x geschwindigkeit und argument 1 die y geschwindigkeit
      4. /***************************************************
      5. Vorher müsst ihr oldx und oldy bestimmen
      6. einfach im create event
      7. oldx = x
      8. oldy = y
      9. ***************************************************/
      10. var oldxs,oldys,g_x,g_y;
      11. g_x = argument0
      12. g_y = argument1
      13. oldxs = x
      14. oldys = y
      15. x = x*2-oldx+g_x
      16. y = y*2-oldy+g_y
      17. oldx = oldxs
      18. oldy = oldys
      Alles anzeigen





      Und noch einen script zum erstellen von joints

      joint:
      Spoiler anzeigen

      GML-Quellcode

      1. /***************************************************
      2. Exampel joint(obj_blabla,obj_blabla2,100,100)
      3. ***************************************************/
      4. P1 = argument0
      5. P2 = argument1
      6. Lenght = argument2*1000000
      7. strong = min(0.2,argument3/100)
      8. for (i=0; i<1; i+=1)
      9. {
      10. ////////////////////////////hier wird die positionen von den ecken verbessert/////////////////////////
      11. Deltax = P2.x - P1.x
      12. Deltay = P2.y - P1.y
      13. DeltaLength = sqr( Deltax *Deltax + Deltay *Deltay )
      14. Diff = ( DeltaLength - Length )/DeltaLength
      15. P1.x += Deltax *strong*Diff
      16. P1.y += Deltay *strong*Diff
      17. P2.x -= Deltax *strong*Diff
      18. P2.y -= Deltay *strong*Diff
      19. }
      Alles anzeigen
      :troll:
    • Und jetzt auch mal etwas von mir:
      Diese Skript prüft, ob sich die Maus in einem Definierten Rahmen, im raum befindet:

      mouse_check_rectangle(x1,y1,x2,y2)


      Spoiler anzeigen

      GML-Quellcode

      1. //checks wether the mouse is in a certain rectangle
      2. //Form:
      3. //mouse_check_rectangle(x1,y1,x2,y2)
      4. //return: true or false
      5. //
      6. var x1 , y1 , x2 , y2;
      7. x1=argument0;
      8. x2=argument2;
      9. y1=argument1;
      10. y2=argument3;
      11. return (mouse_x>x1) && (mouse_x<x2) && (mouse_y>y1) && (mouse_y<y2)
      Alles anzeigen

      hat mir bis jetzt viel unübersichtliches gecode gespart, das ganze ist natürich auch anpassbar, um Die Maus Position auf dem Bildschrim, oder im Fenster zu überprüfen.
      greez Partik

      EDIT: Fehler behoben, Vorschläge akzeptiert und zu Herzen genommen :D

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

    • Partik schrieb:


      GML-Quellcode

      1. //checks wether the mouse is in a certain rectangle
      2. //Form:
      3. //mouse_check_rectangle(x1,y1,x2,y2)
      4. //return: true or false
      5. //
      6. var x1 , y1 , x2 , y2;
      7. x1=argument0;
      8. x2=argument2;
      9. y1=argument1;
      10. y2=argument3;
      11. if (mouse_x>x1) && (mouse_xy1) && (mouse_y{
      12. return true;
      13. }
      14. else
      15. {
      16. return false;
      17. }
      Alles anzeigen


      Solche snippets sind immer gut zu gebrauchen. Ich habe mir generell (nicht nur fürn GM) eine kleine sammlung anscripten, die am anfang eines Projektes immer erst importiert werden. Dieser ist fast überall dabei. Ich möchte noch drauf hinweisen, dass da ein fehler drin ist, die hälfte von if statement fehlt, inklusive einem )

      Man kann das generell noch optimieren. Erst mal brauchst du kein else, da ein return automatisch sofort und hier und jetzt die funktion beendet.

      GML-Quellcode

      1. if (statement) {
      2. return true;
      3. }
      4. return false;


      Und hier noch was:
      In so simplen Konstruktionen kannst du auch einfach das Statement "returnen":

      GML-Quellcode

      1. return statement;
      2. // wäre bei dir einfach
      3. return (mouse_x>x1 && mouse_x<x2 && mouse_y>y1 && mouse_y<y2)


      Durch diese kurze Präsentation will ich dir nicht Stunden Programmierarbeit sparen, aber vllt gibt es dir mehr Verständnis von GML generell ;)

      MfG SDX
    • So, ich bumpe diesen Thread jetzt mal mit einem Skript dessen Erstellung entgegen meiner ersten Schätzung fast eine Stunde gedauert hat ><

      Man kann damit ein hexagonales Gitter zeichnen. Also so etwas:


      Hoffe mal das niemand ernsthaften Augenkrebs von den vielen, scheinbar unnötigen Variablen bekommt. Dies ist kein zeichen von schlechtem Stil sondern dient der Performance. In Zeiten von 4/8 Gb Ram Computern sind Rechenoperationen wohl teurer als der Speicherverbrauch (zumindest in meinen Tests).
      Leicht zu verstehen/verändern sollte das Skript aber trotzdem geblieben sein.

      Spoiler anzeigen

      GML-Quellcode

      1. // draw_hexagonal(startx, starty, width, height, width, color);
      2. var ox, xx, yy, e, size, hsize, dsize, dhsize, tsize, rep1, rep2;
      3. size = argument4;
      4. hsize = size/2;
      5. dsize = 2*size;
      6. tsize = 3*size;
      7. dhsize = size+hsize;
      8. ox = argument0+size;
      9. rep1 = argument3/size+1;
      10. rep2 = argument2/tsize+1;
      11. w = 0;
      12. yy = argument1-size;
      13. draw_set_color(argument5);
      14. repeat(rep1)
      15. {
      16. xx = ox;
      17. xx -= dhsize*(w mod 2 = 0);
      18. w += 1;
      19. repeat(rep2)
      20. {
      21. draw_primitive_begin(pr_linestrip)
      22. draw_vertex(xx,yy);
      23. draw_vertex(xx+size,yy);
      24. draw_vertex(xx+dhsize,yy+size);
      25. draw_vertex(xx+size,yy+dsize);
      26. draw_vertex(xx,yy+dsize);
      27. draw_vertex(xx-hsize,yy+size);
      28. draw_vertex(xx,yy);
      29. draw_primitive_end();
      30. xx += tsize;
      31. }
      32. yy += size;
      33. }
      Alles anzeigen


      Hoffe es ist nützlich für den Einen oder Anderen. Hab das Muster in einer ganzen Reihe von Spielen gesehen.



      EDIT: Achja, wenn man "pr_linestrip" durch "pr_trianglefan" ersetzt kann man auch gefüllte Hexagone zeichnen...

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

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

    • Und wenn man nicht zwischen true/false umschalten will, sondern zwischen zwei bestimmten Werten (z.B. 5 und 7) zieht man einfach den aktuellen Wert der variablen von der Summe der beiden Werte ab. Also so:

      GML-Quellcode

      1. Wert = 12 - Wert //Wert muss natürlich vorher definiert sein
    • Hab hier auch mal einen Script, den ich eig. sehr oft brauche:

      mouse_check_over();

      GML-Quellcode

      1. var over;
      2. over = false;
      3. if(argument0 != 0 && argument1+argument2+argument3 == 0) {
      4. xx = argument0.x;
      5. yy = argument0.y;
      6. over =
      7. (
      8. (mouse_x >= xx-sprite_get_xoffset(argument0.sprite_index) && mouse_y >= yy-sprite_get_yoffset(argument0.sprite_index)) &&
      9. (mouse_x < xx-sprite_get_xoffset(argument0.sprite_index)+sprite_get_width(argument0.sprite_index) && mouse_y < yy-sprite_get_yoffset(argument0.sprite_index)+sprite_get_height(argument0.sprite_index))
      10. );
      11. } else {
      12. if(argument0+argument1+argument2+argument3 == 0) {
      13. over = mouse_check_over(id);
      14. } else {
      15. xx1 = min(argument0,argument2);
      16. xx2 = max(argument0,argument2);
      17. yy1 = min(argument1,argument3);
      18. yy2 = max(argument1,argument3);
      19. over =
      20. (
      21. (mouse_x >= xx1 && mouse_y >= yy1) &&
      22. (mouse_x < xx2 && mouse_y < yy2)
      23. );
      24. }
      25. }
      26. return over;
      Alles anzeigen

      Die Argumente können sein:
      mouse_check_over(); //Gibt zurück ob die Maus über den derzeitigen Objekt ist, der diesen Code ausführt
      mouse_check_over(id) //Gibt zurück ob die Maus über den übergeben Objekt ist.
      mouse_check_over(x1,y1,x2,y2) //Gibt zurück ob die Maus über den Rechteck ist.

      Vllt. braucht es ja jemand.

      MfG Rodrog
      Je mehr Käse, desto mehr Löcher.
      Je mehr Löcher, desto weniger Käse.
      Ergo: Je mehr Käse, desto weniger Käse.

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