1. import java.awt.Rectangle;
  2. import java.util.ArrayList;
  3. public class Collision {
  4. Driver driver;
  5. // Arrayliste für die Spriteobjekte anlegen
  6. ArrayList<WorldObject> spriteListWorld;
  7. // kleine Korrektion für genauere grafische Darstellung
  8. int collisionCorrection = 6;
  9. // Checksummen für Anzahl der Kollisionen
  10. int checkSumRight = 0;
  11. int checkSumLeft = 0;
  12. // Konstruktor für die Sprites
  13. public Collision(Driver driver, ArrayList<WorldObject> spriteListWorld) {
  14. this.driver = driver;
  15. this.spriteListWorld = spriteListWorld;
  16. // Erstellen der Objekt Rechtecke
  17. for (WorldObject sprite : spriteListWorld) {
  18. sprite.rectangle = new Rectangle((int)sprite.x, (int)sprite.y, sprite.width, sprite.height);
  19. }
  20. }
  21. // Kollisionsabfrage für Objekte
  22. public void collisionObjects() {
  23. // Kollisionsabfragen des Driverobjekts mit den Worldobjekten
  24. for (WorldObject sprite : spriteListWorld) {
  25. // // wechselt Kollisionsabfragen bei Imagewechsel
  26. // driver.DriverFlipImage();
  27. // Erstellen des Driver Rechtecks
  28. driver.rectangle = new Rectangle((int)driver.x, (int)driver.y, driver.width, driver.height);
  29. // Abfrage Driver kollidiert mit oberer Kante eines Objekts und fährt auf dem Objekt weiter
  30. if (driver.rectangle.intersectsLine(sprite.rectangle.getMinX() + collisionCorrection, sprite.rectangle.getMinY(),
  31. sprite.rectangle.getMaxX() - collisionCorrection, sprite.rectangle.getMinY())) {
  32. driver.y = sprite.rectangle.getMinY() - driver.height - collisionCorrection;
  33. driver.landing = true;
  34. }
  35. // Abfrage Driver kollidiert mit unterer Kante eines Objekts
  36. if (driver.rectangle.intersectsLine(sprite.rectangle.getMinX() + collisionCorrection, sprite.rectangle.getMaxY(),
  37. sprite.rectangle.getMaxX() - collisionCorrection, sprite.rectangle.getMaxY())) {
  38. driver.jumping = false;
  39. }
  40. // Kollisionsabfrage rechte Kante des Objekts (in der Folge kann der Driver solange nicht weiter nach Links)
  41. if (sprite.rectangle.intersectsLine(driver.rectangle.getMinX(), driver.rectangle.getMinY() + collisionCorrection,
  42. driver.rectangle.getMinX(), driver.rectangle.getMaxY() - collisionCorrection)) {
  43. driver.collideLeft = true;
  44. sprite.collideRight = true;
  45. }
  46. // Kollisionsabfrage linke Kante des Objekts (in der Folge kann der Driver solange nicht weiter nach Rechts)
  47. if (sprite.rectangle.intersectsLine(driver.rectangle.getMaxX(), driver.rectangle.getMinY() + collisionCorrection,
  48. driver.rectangle.getMaxX(), driver.rectangle.getMaxY() - collisionCorrection)) {
  49. driver.collideRight = true;
  50. sprite.collideLeft = true;
  51. }
  52. checkSum();
  53. }
  54. }
  55. // Kollisionsabfrage für Gegner
  56. public void collisionEnemy() {
  57. }
  58. // benötigte Checksumme der Kolisionen durch generierte Objekte
  59. private void checkSum() {
  60. // Gegenrechnen der Checksummen für Rechts und Links (erst wenn die Checksumme 0 ergibt kann der Driver in diese Richtung weiterfahren)
  61. for (WorldObject sprite : spriteListWorld) {
  62. // Checksumme Rechts
  63. if (sprite.collideRight == true) {
  64. checkSumRight++;
  65. }
  66. // Checksumme Links
  67. if (sprite.collideLeft == true) {
  68. checkSumLeft++;
  69. }
  70. // Reset der boolschen Checkvariablen
  71. sprite.collideRight = false;
  72. sprite.collideLeft = false;
  73. }
  74. // Wenn Checksumme gleich 0 darf der Driver weiterfahren (links)
  75. if (checkSumRight == 0) {
  76. driver.collideLeft = false;
  77. }
  78. else {
  79. checkSumRight = 0;
  80. }
  81. // Wenn Checksumme gleich 0 darf der Driver weiterfahren (rechts)
  82. if (checkSumLeft == 0) {
  83. driver.collideRight = false;
  84. }
  85. else {
  86. checkSumLeft = 0;
  87. }
  88. }
  89. }

goto line:
Compare with:
text copy window edit this code post new code