java - A new object seems to change the fields of previous objects -


i'm writing game contains elevators obstacle. elevator spawns either left or right of screen , has random chance ascending elevator or descending elevator. looks this:

public class elevator extends worldobject {      public static boolean ascending;      public elevator(int screenheight, int xpos) {         super(xpos, screenheight, 0, 0);         ascending = new random().nextboolean();     }      static public boolean isascending(){         return ascending;     }  } 

worldobject extends looks this:

public class worldobject {      protected float posx;     protected float posy;     protected float velx, vely;      public float getposx() {         return posx;     }      public void setposx(float posx) {         this.posx = posx;     }      public float getposy() {         return posy;     }      public void setposy(float posy) {         this.posy = posy;     }      public float getvelx() {         return velx;     }      public void setvelx(float velx) {         this.velx = velx;     }      public float getvely() {         return vely;     }      public void setvely(float vely) {         this.vely = vely;     }      public worldobject(float posx, float posy, float velx, float vely) {         this.posx = posx;         this.posy = posy;         this.velx = velx;         this.vely = vely;     }  } 

every 5 seconds elevator created , added arraylist of elevators so:

    if (timetoelevator > 5.0f) {         timetoelevator = 0;         elevator elevator = new elevator((int) screenheight, (int) generateelevatorxpos());         sprite esprite = new sprite(elevatortexture);         esprite.setorigin(0, 0);         elevators.add(elevator);         elevatorsprites.add(esprite);     } 

i check collisions in each elevator player, remove if goes out of bounds , if neither of these happen update position of elevator object:

public static void calculateelevatorcollisions() {     int counter = 0;     (iterator<elevator> = elevators.iterator(); i.hasnext(); ) {         elevator item = i.next();         if (item.getposy() < -100) {             //remove elevator         } else if (..collision..) {             //collision         } else {             item.setvely(item.isascending() ? -5 : 5);             item.setposy(item.getvely() + item.getposy());             elevatorsprites.get(counter).setposition(item.getposx(),                     item.getposy());             counter++;         } 

my issue whenever new elevator created current elevators change direction direction of new elevator. suppose have 2 ascending elevators being drawn, whenever third elevator created descending, other 2 ascending elevators ascend!

what's causing this?

this problem:

public static boolean ascending;        ^^^^^^ 

static means "this class field shared objects". if changed field 1 object, noticed across all objects of type.

removing make ascending instance field means each instance of elevator have own copy can modify without changing other instances' copy.


Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

Python ctypes access violation with const pointer arguments -