- Explosion explosion1;
- ArrayList<Entity> entities = new ArrayList<Entity>();
- ArrayList<Entity> toRemove = new ArrayList<Entity>();
- void setup()
- {
- size(500, 500, P3D);
- frameRate(120);
- background(0);
- explosion1 = new Explosion();
- entities.add(new Joueur(100, 300));
- }
- void draw()
- {
- for (int i = entities.size()-1; i >= 0; i--)
- {
- Entity entity = entities.get(i);
- entity.display();
- entity.update();
- if (entity.x > 300 ) toRemove.add(entities.get(i));
- }
- for (Entity e : entities)
- {
- if (e.destroyed) toRemove.add(e);
- }
- for (Entity r : toRemove)
- {
- r.destroy();
- entities.remove(r);
- }
- explosion1.display();
- }
- abstract class Entity {
- float x, y, w, h;
- boolean ally, destroyed = false;
- Entity(float x, float y, boolean ally)
- {
- this.x = x;
- this.y = y;
- this.ally = ally;
- }
- void update()
- {
- }
- void display()
- {
- rect(x, y, 20, 20);
- }
- void touched()
- {
- }
- void destroy()
- {
- }
- }
- class Vaisseau extends Entity {
- int vie;
- double delay;
- double delayTir;
- Vaisseau(float x, float y, boolean player)
- {
- super(x, y, player);
- this.ally = player;
- delayTir = ally ? 10 : random(200, 250);
- delay = (ally ? delayTir : delayTir/2) ;
- }
- void update()
- {
- }
- void tir()
- {
- //...
- }
- void touched()
- {
- vie -= 1;
- if (vie <= 0) destroyed = true;
- }
- void destroy()
- {
- explosion1.start(x, y);
- }
- }
- class Joueur extends Vaisseau {
- int vitesse;
- Joueur(float x, float y)
- {
- super(x, y, true);
- vitesse = 5;
- vie = 1;
- }
- void update()
- {
- x ++;
- }
- }
- class Explosion {
- // Starting position of Explosion
- float xpos, ypos;
- // a list of images with the frames of the explosion
- PImage frames[];
- // current frame is frameNumber
- int frameNumber = 0;
- int frameNumberAdd=1; // add to go to next frame (mostly 1)
- // additional counter between two frames (to make it slower)
- int countBeforeNextFrame = 0;
- int speedOfAnimation = 1; // 1 is fast, 12 is slow e.g.
- // has the explosion started and
- // does the explosion still exist?
- boolean exist=false; // no
- // constructor
- Explosion() {
- // run only once, not for every new explosion!!!!
- PImage spriteSheet;
- spriteSheet = loadImage("Explosion.png");
- print ("spriteSheet is " + spriteSheet.width + " x ");
- println (spriteSheet.height);
- // We read the images from the sprite sheet to make things a little faster.
- // All those numbers (5, 64...) used here
- // depend from the sprite sheet you have.
- // This is a 5x5 image sprite sheet with size of 64x64 per one image.
- frames = new PImage[5*5];
- for (int y = 0; y < 5; y++) {
- for (int x = 0; x < 5; x++) {
- frames[y*5+x] = spriteSheet.get(x*64, y*64, 64, 64);
- }
- } // for
- }//constr
- void start(float x_, float y_) {
- if (!exist) {
- // start it
- exist=true;
- // reset
- countBeforeNextFrame = 0;
- frameNumber=0;
- // set position
- xpos=x_;
- ypos=y_;
- }
- }
- void display() {
- // Display
- // if explosion (still) runs
- if (exist) {
- // println(frameNumber);
- // display current frame
- image(frames[frameNumber], xpos-32, ypos-32);
- // to make movement slower: countBeforeNextFrame
- // by Chinchbug (<a href="http://www.openprocessing.org/sketch/26391" target="_blank" rel="nofollow">http://www.openprocessing.org/sketch/26391</a>)
- countBeforeNextFrame++;
- if (countBeforeNextFrame > speedOfAnimation) {
- // reset countBeforeNextFrame
- countBeforeNextFrame = 0;
- // go to next frame
- frameNumber+=frameNumberAdd;
- // if last frame, end explosion
- if (frameNumber >= 25) {
- exist=false;
- }// if
- }// if
- }//if
- } // func
- //
- }// class