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
Post a Comment