Java: Firing projectile in different direction without affecting projectile already sent -


so basically, when change direction projectile shoot follows along fine. problem previous projectile changes direction.

this projectile.java :

package dev.codenmore.tilegame.gfx;  import java.awt.graphics;  import dev.codenmore.tilegame.handler; import dev.codenmore.tilegame.entity.creatures.player;  public class projectile {      private double x;     private double y;      public projectile (double x, double y, handler handler){         this.x = x;         this.y = y;     }      public void tick(){         if ( player.getpos() == 3)             x += 10;         if ( player.getpos() == 2)             x -= 10;         if (player.getpos() == 1)             y -= 10;         if (player.getpos() == 0)             y += 10;     }      public void render(graphics g){         g.drawimage(assets.arrow, (int) x, (int) y, null);     }  } 

this controller.java:

package dev.codenmore.tilegame;  import java.awt.graphics; import java.util.linkedlist;  import dev.codenmore.tilegame.gfx.projectile;  public class controller {      private static linkedlist<projectile> b = new linkedlist <projectile>();      projectile tempprojectile;      handler handler;      public controller(handler handler){         this.handler = handler;       }      public void tick(){         for(int = 0; < b.size(); i++){             tempprojectile = b.get(i);              tempprojectile.tick();          }     }      public void render(graphics g){         for(int = 0; < b.size(); i++){             tempprojectile = b.get(i);              tempprojectile.render(g);          }      }      public static void addprojectile(projectile block){         b.add(block);     }     public static void removeprojectile(projectile block){         b.remove(block);     }     } 

my player.java:

package dev.codenmore.tilegame.entity.creatures;  import java.awt.color; import java.awt.graphics;  import dev.codenmore.tilegame.controller; import dev.codenmore.tilegame.game; import dev.codenmore.tilegame.handler; import dev.codenmore.tilegame.gfx.assets; import dev.codenmore.tilegame.gfx.projectile;  public class player extends creature {      public static int pos = 0;        public player(handler handler, float x, float y) {         super(handler, x, y, creature.default_creature_width, creature.default_creature_height);          bounds.x = 46;         bounds.y = 64;         bounds.width = 32;         bounds.height = 44;      }      @override     public void tick() {         getinput();         move();         handler.getgamecamera().centeronentity(this);     }      private void getinput(){         xmove = 0;         ymove = 0;          if(handler.getkeymanager().up)             ymove = -speed;         if(handler.getkeymanager().down)             ymove = speed;         if(handler.getkeymanager().left)             xmove = -speed;         if(handler.getkeymanager().right)             xmove = speed;         if(handler.getkeymanager().shoot)             controller.addprojectile(new projectile((double)(x - handler.getgamecamera().getxoffset()),  (double)(y - handler.getgamecamera().getyoffset()), handler));      }      public static int getpos(){         return pos;     }      @override     public void render(graphics g) {            if ( pos == 0)             g.drawimage(assets.player, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);         if (pos == 1)             g.drawimage(assets.playerup, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);         if (pos == 2)             g.drawimage(assets.playerleft, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);         if (pos == 3)             g.drawimage(assets.playerright, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);         if(handler.getkeymanager().up){             g.drawimage(assets.playerup, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);             pos = 1;         }else if(handler.getkeymanager().left){             g.drawimage(assets.playerleft, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);             pos = 2;         }else if(handler.getkeymanager().right){             g.drawimage(assets.playerright, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);             pos = 3;         }else if(handler.getkeymanager().down){             g.drawimage(assets.player, (int)(x - handler.getgamecamera().getxoffset()), (int)(y - handler.getgamecamera().getyoffset()), width, height, null);             pos = 0;         }      }  } 

i'm new programming sorry mistakes. happens: http://gyazo.com/118b525d22e42a92fece77f70201cdad

problem there:

public void tick(){     if ( player.getpos() == 3)         x += 10;     if ( player.getpos() == 2)         x -= 10;     if (player.getpos() == 1)         y -= 10;     if (player.getpos() == 0)         y += 10; } 

in each tick player asked on direction, can changed, projectiles change too. avoid it, save position each projectile @ start this:

private int pos; public projectile (double x, double y, handler handler){     this.x = x;     this.y = y;     this.pos = player.getpos(); } 

and tick method:

public void tick(){     if ( pos == 3)         x += 10;     if ( pos == 2)         x -= 10;     if ( pos == 1)         y -= 10;     if ( pos == 0)         y += 10; } 

switch better:

public void tick(){     switch(pos){         case 3: x+=10; break;         case 2: x-=10; break;         case 1: y-=10; break;         case 0: y+=10; break;     } } 

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -