1. Explosion explosion1;
  2. ArrayList<Entity> entities = new ArrayList<Entity>();
  3. ArrayList<Entity> toRemove = new ArrayList<Entity>();
  4. void setup()
  5. {
  6. size(500, 500, P3D);
  7. frameRate(120);
  8. background(0);
  9. explosion1 = new Explosion();
  10. entities.add(new Joueur(100, 300));
  11. }
  12. void draw()
  13. {
  14. for (int i = entities.size()-1; i >= 0; i--)
  15. {
  16. Entity entity = entities.get(i);
  17. entity.display();
  18. entity.update();
  19. if (entity.x > 300 ) toRemove.add(entities.get(i));
  20. }
  21. for (Entity e : entities)
  22. {
  23. if (e.destroyed) toRemove.add(e);
  24. }
  25. for (Entity r : toRemove)
  26. {
  27. r.destroy();
  28. entities.remove(r);
  29. }
  30. explosion1.display();
  31. }
  32. abstract class Entity {
  33. float x, y, w, h;
  34. boolean ally, destroyed = false;
  35. Entity(float x, float y, boolean ally)
  36. {
  37. this.x = x;
  38. this.y = y;
  39. this.ally = ally;
  40. }
  41. void update()
  42. {
  43. }
  44. void display()
  45. {
  46. rect(x, y, 20, 20);
  47. }
  48. void touched()
  49. {
  50. }
  51. void destroy()
  52. {
  53. }
  54. }
  55. class Vaisseau extends Entity {
  56. int vie;
  57. double delay;
  58. double delayTir;
  59. Vaisseau(float x, float y, boolean player)
  60. {
  61. super(x, y, player);
  62. this.ally = player;
  63. delayTir = ally ? 10 : random(200, 250);
  64. delay = (ally ? delayTir : delayTir/2) ;
  65. }
  66. void update()
  67. {
  68. }
  69. void tir()
  70. {
  71. //...
  72. }
  73. void touched()
  74. {
  75. vie -= 1;
  76. if (vie <= 0) destroyed = true;
  77. }
  78. void destroy()
  79. {
  80. explosion1.start(x, y);
  81. }
  82. }
  83. class Joueur extends Vaisseau {
  84. int vitesse;
  85. Joueur(float x, float y)
  86. {
  87. super(x, y, true);
  88. vitesse = 5;
  89. vie = 1;
  90. }
  91. void update()
  92. {
  93. x ++;
  94. }
  95. }
  96. class Explosion {
  97. // Starting position of Explosion
  98. float xpos, ypos;
  99. // a list of images with the frames of the explosion
  100. PImage frames[];
  101. // current frame is frameNumber
  102. int frameNumber = 0;
  103. int frameNumberAdd=1; // add to go to next frame (mostly 1)
  104. // additional counter between two frames (to make it slower)
  105. int countBeforeNextFrame = 0;
  106. int speedOfAnimation = 1; // 1 is fast, 12 is slow e.g.
  107. // has the explosion started and
  108. // does the explosion still exist?
  109. boolean exist=false; // no
  110. // constructor
  111. Explosion() {
  112. // run only once, not for every new explosion!!!!
  113. PImage spriteSheet;
  114. spriteSheet = loadImage("Explosion.png");
  115. print ("spriteSheet is " + spriteSheet.width + " x ");
  116. println (spriteSheet.height);
  117. // We read the images from the sprite sheet to make things a little faster.
  118. // All those numbers (5, 64...) used here
  119. // depend from the sprite sheet you have.
  120. // This is a 5x5 image sprite sheet with size of 64x64 per one image.
  121. frames = new PImage[5*5];
  122. for (int y = 0; y < 5; y++) {
  123. for (int x = 0; x < 5; x++) {
  124. frames[y*5+x] = spriteSheet.get(x*64, y*64, 64, 64);
  125. }
  126. } // for
  127. }//constr
  128. void start(float x_, float y_) {
  129. if (!exist) {
  130. // start it
  131. exist=true;
  132. // reset
  133. countBeforeNextFrame = 0;
  134. frameNumber=0;
  135. // set position
  136. xpos=x_;
  137. ypos=y_;
  138. }
  139. }
  140. void display() {
  141. // Display
  142. // if explosion (still) runs
  143. if (exist) {
  144. // println(frameNumber);
  145. // display current frame
  146. image(frames[frameNumber], xpos-32, ypos-32);
  147. // to make movement slower: countBeforeNextFrame
  148. // by Chinchbug (<a href="http://www.openprocessing.org/sketch/26391" target="_blank" rel="nofollow">http://www.openprocessing.org/sketch/26391</a>)
  149. countBeforeNextFrame++;
  150. if (countBeforeNextFrame > speedOfAnimation) {
  151. // reset countBeforeNextFrame
  152. countBeforeNextFrame = 0;
  153. // go to next frame
  154. frameNumber+=frameNumberAdd;
  155. // if last frame, end explosion
  156. if (frameNumber >= 25) {
  157. exist=false;
  158. }// if
  159. }// if
  160. }//if
  161. } // func
  162. //
  163. }// class