2d - Java Game Sprite Stuck -


i having problem stuck sprite switch jpanel via cardlayout.

import java.awt.cardlayout;  import java.awt.event.actionevent;  import java.awt.event.actionlistener;  import java.util.arraylist; import javax.swing.jbutton;  import javax.swing.jframe;  import javax.swing.jpanel;  public class game extends jframe implements runnable {      private viewa v1;     private viewb v2;     private viewc v3;     private viewd v4;     private player player;     private cardlayout c1;     private jpanel contpanel;      // ############## view buttonlistener     public class viewabuttonlist implements actionlistener{          public void actionperformed(actionevent ev){             try{             c1.show(contpanel, "1");              } catch (exception ex){              ex.printstacktrace();             }          }       }     // ############## view b button listener     public class viewbbuttonlist implements actionlistener{          public void actionperformed(actionevent ev){             try{             c1.show(contpanel, "2");              } catch (exception ex){              ex.printstacktrace();             }          }       }     // ############## viewc button actionevent     public class viewcbuttonlist implements actionlistener{          public void actionperformed(actionevent ev){             try{             c1.show(contpanel, "3");              } catch (exception ex){              ex.printstacktrace();             }          }       }     // ############## view d button action event     public class viewdbuttonlist implements actionlistener{          public void actionperformed(actionevent ev){             try{             c1.show(contpanel, "4");              } catch (exception ex){              ex.printstacktrace();             }          }       }          public game() {         player = new player();         // load player settings server         //  ..         //    contpanel = new jpanel();      //load views    v1 = new viewa(player); v2=new viewb(player); v3 = new viewc(player); v4 =new viewd(player);       c1 = new cardlayout();       contpanel.setlayout(c1);        contpanel.add(v1,"1");       contpanel.add(v2,"2");       contpanel.add(v3"3");       contpanel.add(v4,"4");          c1.show(contpanel, "2");         currpos =2;          this.add(contpanel);          setsize(652, 480);         setlocationrelativeto(null);         settitle("game");         setresizable(false);         setvisible(true);//go end of view b (x=0), change view a, close view b          // create 4 of each button place in each seperate view (to swtich , forth)       // ................       }      public static void main(string[] args) {          javax.swing.swingutilities.invokelater(new runnable() {              public void run() {                  new game();              }          });     }      @override   public void run() {         // todo auto-generated method stub     } } 

now.. works standpoint of switching between screens.. player sprite gets stuck on screen after switch, on initial load can move sprite around arrow keys. not sure if passing player on new viewa(player) might culprit.. have feeling is.. can't figure out doing wrong..

here's theplayer:

import java.awt.image; import java.awt.rectangle; import java.awt.event.keyevent;

import java.util.arraylist;

import javax.swing.imageicon;

public class player {

private string playersprite = "playersprite.png";  private int dx; private int dy; private int x; private int y; private int width; private int height; private boolean isfired; private boolean visible; private image image; private arraylist missiles;   public player() {     imageicon ii = new imageicon(this.getclass().getresource(playersprite));     image = ii.getimage();     width = image.getwidth(null);     height = image.getheight(null);     missiles = new arraylist();     visible = true;     isfired=false;     //default spawn location     x = 600;     y = 400; }   public void move() {      x += dx;     y += dy;     if(x<=0){x=0;}      if(x>=640-20){x=640-20;}        if(y<=0){y=0;}   if(y>=400){y=400;} }  public int getx() {     return x; }  public int gety() {     return y; }  public void setx(int x){   this.x=x; } public void sety(int y){   this.y=y; }  public image getimage() {     return image; }  public arraylist getmissiles() {     return missiles; }  public void setvisible(boolean visible) {     this.visible = visible; }  public boolean isvisible() {     return visible; }  public rectangle getbounds() {     return new rectangle(x, y, 32, 32); }   public void keypressed(keyevent e) {    system.out.println("x: "+x+",y: "+y);       int key = e.getkeycode();      if (key == keyevent.vk_space) {       if(isfired==false){           isfired=true;         fire();       } else return;     }      if (key == keyevent.vk_left) {         dx = -2;     }      if (key == keyevent.vk_right) {         dx = 2;     }      if (key == keyevent.vk_up) {         dy = -2;     }      if (key == keyevent.vk_down) {         dy = 2;     } }  public void fire() {    system.out.println("player used weapon");   // missiles.add(new missile(x, y)); }  public void keyreleased(keyevent e) {     int key = e.getkeycode();      if (key == keyevent.vk_left) {         dx = 0;     }      if (key == keyevent.vk_right) {         dx = 0;     }      if (key == keyevent.vk_up) {         dy = 0;     }      if (key == keyevent.vk_down) {         dy = 0;     }     if (key == keyevent.vk_space) {         isfired=false;     } } } 

keylistener require component registered focusable , have focus, means when click jbutton focus moves button , component keylistener no longer has keyboard focus , therefore no longer receive key events.

instead, recommended use key bindings api has capacity overcome these limitations


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -