Colissions Abfrage stottert

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

  • Colissions Abfrage stottert

    Ich hab bei meinen Panzerspiel eine Colissions Abfrage die tile bassierend ist.
    Ich habe damit noch nie gearbeitet und habe mir Codes zusammen gesucht.
    Wenn ich ein Viereck als Player benutze das 16x16 groß ist und sich nicht dreht, ist die Abfrage ganz sauber.
    Ich habe aber einen Panzer (48x34) als Player der sich natürlich auch dreht.
    Sobald er gehen ein Colissionstile (16x16) kommt springt er richtig zurück oder zur Seite.
    Kann jemand sich den Code mal anschauen?
    Vor allem die Zeilen mit

    GML-Quellcode

    1. x = x - (x mod 16) + 15 - (bbox_right - x);

    verstehe ich nicht ganz. Was ist mit diesen Zahlen?
    Ich habe mal den ganzen Code rein kopiert, damit man auch sieht wie ich den Panzer bewege.

    GML-Quellcode

    1. var bbox_side;
    2. global.full -= 0.01;
    3. if(gamepad_is_connected(0)){
    4. key_right = gamepad_button_check(0, gp_padr);
    5. key_left = gamepad_button_check(0, gp_padl);
    6. key_up = gamepad_button_check(0, gp_padu);
    7. key_down = gamepad_button_check(0, gp_padd);
    8. }else{
    9. key_right = keyboard_check(ord("D"));
    10. key_left = keyboard_check(ord("A"));
    11. key_up = keyboard_check(ord("W"));
    12. key_down = keyboard_check(ord("S"));
    13. }
    14. // Check if we are moving
    15. xaxis = key_right - key_left;
    16. yaxis = key_down - key_up;
    17. moving = (yaxis != 0);
    18. if(yaxis == -1 || yaxis == 0) {
    19. if(key_left) {
    20. image_angle += turnSpd;
    21. obj_turm.image_angle += turnSpd;
    22. } else if(key_right) {
    23. image_angle -= turnSpd;
    24. obj_turm.image_angle -= turnSpd;
    25. }
    26. }else{
    27. if(key_left) {
    28. image_angle -= turnSpd;
    29. obj_turm.image_angle -= turnSpd;
    30. } else if(key_right) {
    31. image_angle += turnSpd;
    32. obj_turm.image_angle += turnSpd;
    33. }
    34. }
    35. if(moving) {
    36. // If we are moving
    37. dir = yaxis
    38. // Movement
    39. if(yaxis == -1) {
    40. // If we are moving forward
    41. if (len < maxSpd) {
    42. len += accSpd;
    43. } else if(len < maxSpd) {
    44. len = maxSpd;
    45. }
    46. } else if(yaxis == 1) {
    47. // If we are moving backwards
    48. if(len > -maxReverseSpd) {
    49. len -= accReverseSpd;
    50. } else if(len < -maxReverseSpd) {
    51. len = -maxReverseSpd;
    52. }
    53. }
    54. } else {
    55. // If we are not moving
    56. if(dir == -1) {
    57. // If we are moving forward
    58. if(len > 0) {
    59. len -= fricSpd;
    60. } else if(len <= 0) {
    61. len = 0;
    62. }
    63. } else if(dir == 1) {
    64. // If we are moving backwards
    65. if(len < 0) {
    66. len += fricSpd;
    67. } else if(len >= 0) {
    68. len = 0;
    69. }
    70. }
    71. }
    72. // Calculate where to move
    73. hspd = lengthdir_x(len , image_angle);
    74. vspd = lengthdir_y(len , image_angle);
    75. // Move the car
    76. x += hspd;
    77. y += vspd;
    78. hsp = hspd;
    79. vsp = vspd;
    80. if(hsp > 0){
    81. bbox_side = bbox_right;
    82. set_spur = true;
    83. }else{
    84. bbox_side = bbox_left;
    85. }
    86. if(tilemap_get_at_pixel(tilemap,bbox_side + hsp,bbox_top) != 0 || tilemap_get_at_pixel(tilemap,bbox_side + hsp,bbox_bottom) != 0){
    87. if(hsp > 0){
    88. x = x - (x mod 16) + 15 - (bbox_right - x);
    89. }else{
    90. x = x - (x mod 16) - (bbox_left - x);
    91. }
    92. hsp = 0;
    93. }
    94. if(vsp > 0){
    95. bbox_side = bbox_bottom;
    96. }else{
    97. bbox_side = bbox_top;
    98. }
    99. if(tilemap_get_at_pixel(tilemap,bbox_left,bbox_side + vsp) != 0 || tilemap_get_at_pixel(tilemap,bbox_right,bbox_side + vsp) != 0){
    100. if(vsp > 0){
    101. y = y - (y mod 16) + 15 - (bbox_bottom - y);
    102. }else{
    103. y = y - (y mod 16) - (bbox_top - y);
    104. }
    105. vsp = 0;
    106. }
    Alles anzeigen

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