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