GML Skript portieren

  • Java

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

  • GML Skript portieren

    Dieser Code erstellt ein Polygon basierend auf dem Umriss eines Image. Er stammt aus GMPhysics by Chris Giles.
    Hat jemand von Euch Lust und Zeit (ich nämlich gerade nicht), in Java umzusetzen?

    Spoiler anzeigen

    GML-Quellcode

    1. //creates an instance of a polygon with verticies automatically added
    2. //arg0 - sprite name
    3. //arg1 - detail (lower = better)
    4. //arg2 - angle threshold in degrees (will remove points with angle differences below this level; 15 is a good value)
    5. // making this larger will make the body faster but less accurate;
    6. //arg3 - filename (optional); if specefied, a file with the vertex infromation will be created
    7. //returns new polygon ID
    8. d = argument1;
    9. spr = argument0;
    10. w = sprite_get_width(spr);
    11. h = sprite_get_height(spr);
    12. xoff = sprite_get_xoffset(spr);
    13. yoff = sprite_get_yoffset(spr);
    14. sprite_set_offset(spr,0,0);
    15. s = surface_create(w,h);
    16. surface_set_target(s);
    17. draw_set_blend_mode(bm_normal);
    18. draw_set_color(make_color_rgb(128,0,128));
    19. draw_set_alpha(1);
    20. draw_rectangle(0,0,w,h,false);
    21. draw_set_color(c_white);
    22. draw_sprite(spr,0,0,0);
    23. poly = create_polygon();
    24. trans = make_color_rgb(128,0,128);
    25. numPoints = 0
    26. vertex_x[0] = 0;
    27. vertex_y[0] = 0;
    28. vertex_k[0] = 1;
    29. tx = 0;
    30. ty = 0;
    31. fy = -1;
    32. for (tx=0;tx<w;tx+=d)
    33. {
    34. for (ty=0;ty<h;ty+=1)
    35. {
    36. if (surface_getpixel(s,tx,ty) != trans)
    37. {
    38. vertex_x[numPoints] = tx-xoff;
    39. vertex_y[numPoints] = h-ty-yoff;
    40. vertex_k[numPoints] = 1;
    41. numPoints += 1;
    42. if (fy < 0)
    43. fy = ty;
    44. lx = tx;
    45. ly = ty;
    46. break;
    47. }
    48. }
    49. }
    50. for (ty=0;ty<h;ty+=d)
    51. {
    52. for (tx=w-1;tx>=0;tx-=1)
    53. {
    54. if (surface_getpixel(s,tx,ty) != trans && ty > ly)
    55. {
    56. vertex_x[numPoints] = tx-xoff;
    57. vertex_y[numPoints] = h-ty-yoff;
    58. vertex_k[numPoints] = 1;
    59. numPoints += 1;
    60. lx = tx;
    61. ly = ty;
    62. break;
    63. }
    64. }
    65. }
    66. for (tx=w-1;tx>=0;tx-=d)
    67. {
    68. for (ty=h-1;ty>=0;ty-=1)
    69. {
    70. if (surface_getpixel(s,tx,ty) != trans && tx < lx)
    71. {
    72. vertex_x[numPoints] = tx-xoff;
    73. vertex_y[numPoints] = h-ty-yoff;
    74. vertex_k[numPoints] = 1;
    75. numPoints += 1;
    76. lx = tx;
    77. ly = ty;
    78. break;
    79. }
    80. }
    81. }
    82. for (ty=h-1;ty>=0;ty-=d)
    83. {
    84. for (tx=0;tx<w;tx+=1)
    85. {
    86. if (surface_getpixel(s,tx,ty) != trans && ty < ly && ty > fy)
    87. {
    88. vertex_x[numPoints] = tx-xoff;
    89. vertex_y[numPoints] = h-ty-yoff;
    90. vertex_k[numPoints] = 1;
    91. numPoints += 1;
    92. lx = tx;
    93. ly = ty;
    94. break;
    95. }
    96. }
    97. }
    98. for (i=0;i<numPoints-2;i+=1)
    99. {
    100. ang1 = point_direction(vertex_x[i],vertex_y[i], vertex_x[i+1],vertex_y[i+1]);
    101. ang2 = point_direction(vertex_x[i+1],vertex_y[i+1], vertex_x[i+2],vertex_y[i+2]);
    102. if (abs(ang1-ang2) <= argument2)
    103. vertex_k[i+1] = 0;
    104. }
    105. ang1 = point_direction(vertex_x[numPoints-2],vertex_y[numPoints-2], vertex_x[numPoints-1],vertex_y[numPoints-1]);
    106. ang2 = point_direction(vertex_x[numPoints-1],vertex_y[numPoints-1], vertex_x[0],vertex_y[0]);
    107. if (abs(ang1-ang2) <= argument2)
    108. vertex_k[numPoints-1] = 0;
    109. ang1 = point_direction(vertex_x[numPoints-1],vertex_y[numPoints-1], vertex_x[0],vertex_y[0]);
    110. ang2 = point_direction(vertex_x[0],vertex_y[0], vertex_x[1],vertex_y[1]);
    111. if (abs(ang1-ang2) <= argument2)
    112. vertex_k[0] = 0;
    113. fl = -1;
    114. if (is_string(argument3))
    115. {
    116. fl = file_text_open_write(argument3);
    117. file_text_write_string(fl, "poly = create_polygon();");
    118. file_text_writeln(fl);
    119. }
    120. for (i=0;i<numPoints;i+=1)
    121. if (vertex_k[i] == 1)
    122. {
    123. if (fl >= 0)
    124. {
    125. file_text_write_string(fl, "add_vertex( poly, " + string(vertex_x[i]) + ", " + string(vertex_y[i]) + " );");
    126. file_text_writeln(fl);
    127. }
    128. add_vertex(poly, vertex_x[i], vertex_y[i]);
    129. }
    130. if (fl >= 0)
    131. file_text_close(fl);
    132. sprite_set_offset(spr,xoff,yoff);
    133. surface_reset_target();
    134. surface_free(s);
    135. return poly;
    Alles anzeigen
  • Ich hab zwar auch keine Lust ^^

    aber sieh dir das mal an :) , ist ein gm to java converter

    oder auch das

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

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

  • Hab's doch selber gemacht. Jetzt werde ich probieren, wie sich area.intersect für Kollisionsabfragen eignet.

    Spoiler anzeigen

    Quellcode

    1. //creates an outline of a transparent image, points are stored in an array
    2. //arg0 - BufferedImage source image
    3. //arg1 - Int detail (lower = better)
    4. //arg2 - Int angle threshold in degrees (will remove points with angle differences below this level; 15 is a good value)
    5. // making this larger will make the body faster but less accurate;
    6. Point[] MakePoly(BufferedImage spr,int d,int angle){
    7. int w= spr.getWidth(null); int h= spr.getHeight(null);
    8. int[] vertex_x=new int[255], vertex_y=new int[255], vertex_k=new int[255];
    9. int numPoints=0, tx=0,ty=0,fy=-1,lx=0,ly=0; vertex_x[0]=0; vertex_y[0]=0; vertex_k[0]=1;
    10. for (tx=0;tx<w;tx+=d) for (ty=0;ty<h;ty+=1) if((spr.getRGB(tx,ty)>>24) != 0x00 )
    11. {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints++; if (fy<0) fy=ty; lx=tx; ly=ty; break; }
    12. for (ty=0;ty<h;ty+=d) for (tx=w-1;tx>=0;tx-=1) if((spr.getRGB(tx,ty)>>24) != 0x00 && ty > ly)
    13. {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints++; lx=tx; ly=ty; break; }
    14. for (tx=w-1;tx>=0;tx-=d) for (ty=h-1;ty>=0;ty-=1) if((spr.getRGB(tx,ty)>>24) != 0x00 && tx < lx)
    15. {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints ++; lx=tx; ly=ty; break; }
    16. for (ty=h-1;ty>=0;ty-=d) for (tx=0;tx<w;tx+=1) if((spr.getRGB(tx,ty)>>24) != 0x00 && ty < ly && ty > fy)
    17. {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints ++; lx=tx; ly=ty; break; }
    18. double ang1,ang2; for (int i=0;i<numPoints-2;i++) {
    19. ang1 = PointDirection(vertex_x[i],vertex_y[i], vertex_x[i+1],vertex_y[i+1]);
    20. ang2 = PointDirection(vertex_x[i+1],vertex_y[i+1], vertex_x[i+2],vertex_y[i+2]);
    21. if (Math.abs(ang1-ang2) <= angle) vertex_k[i+1] = 0; }
    22. ang1 = PointDirection(vertex_x[numPoints-2],vertex_y[numPoints-2], vertex_x[numPoints-1],vertex_y[numPoints-1]);
    23. ang2 = PointDirection(vertex_x[numPoints-1],vertex_y[numPoints-1], vertex_x[0],vertex_y[0]);
    24. if (Math.abs(ang1-ang2) <= angle) vertex_k[numPoints-1] = 0;
    25. ang1 = PointDirection(vertex_x[numPoints-1],vertex_y[numPoints-1], vertex_x[0],vertex_y[0]);
    26. ang2 = PointDirection(vertex_x[0],vertex_y[0], vertex_x[1],vertex_y[1]);
    27. if (Math.abs(ang1-ang2) <= angle) vertex_k[0] = 0;
    28. int n=0;for (int i=0;i<numPoints;i++)if(vertex_k[i]==1)n++;
    29. Point[] poly= new Point[n]; n=0; for (int i=0;i<numPoints;i++) if (vertex_k[i]==1)
    30. { poly[n]=new Point(); poly[n].x=vertex_x[i]; poly[n].y=h-vertex_y[i];n++;} return poly;
    31. }
    32. double PointDirection(double xfrom,double yfrom,double xto,double yto){
    33. return Math.atan2(yto-yfrom,xto-xfrom)*180/Math.PI ;
    34. }
    Alles anzeigen
    Bilder
    • screen.JPG

      175,57 kB, 1.200×676, 308 mal angesehen

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