Hallo, ich arbeite gerade an einem sporadischen Frogger Code, stoße jedoch im Moment auf das Problem, dass ich die Figur so gut wie nicht bewegen kann. Wenn ich nach links tippe, bewegt er sich zwar 1 nach links aber danach will er sich nicht mehr bewegen. Dasselbe gilt für alle Richtungen.
Das ist der Code mit dem KeyListener und den Panels:
GameInstance:
Spielerklasse:
Sieht hier irgendwer den Fehler, den ich einfach nicht sehe??
Das ist der Code mit dem KeyListener und den Panels:
Java:
public class FroggerFrame extends JFrame {
GameInstance gi;
FroggerStartPanel fstp;
MoveListener ml = new MoveListener();
public FroggerFrame() {
this.setLayout(new BorderLayout());
this.setTitle("Frogger");
gi = new GameInstance();
FroggerGamePanel fgp = new FroggerGamePanel();
FroggerScorePanel fsp = new FroggerScorePanel();
fstp = new FroggerStartPanel();
this.add(fgp, BorderLayout.CENTER);
this.add(fsp, BorderLayout.PAGE_START);
this.add(fstp, BorderLayout.PAGE_END);
this.addKeyListener(ml);
super.setDefaultCloseOperation(EXIT_ON_CLOSE);
super.repaint();
pack();
super.setVisible(true);
}
public static void main(String[] args) {
FroggerFrame p = new FroggerFrame();
}
class FroggerGamePanel extends JPanel{
public FroggerGamePanel() {
setPreferredSize(new Dimension(600,300));
setOpaque(true);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(io.ImageLoader.getActor("froggerstreet"),0,0,null);
}
}
class FroggerScorePanel extends JPanel{
private TitledBorder t3 = BorderFactory.createTitledBorder("Menu");
private Border etched = BorderFactory.createEtchedBorder(Color.WHITE, Color.white);
public FroggerScorePanel() {
setLayout(new FlowLayout());
setPreferredSize(new Dimension(600,100));
setBackground(Color.DARK_GRAY);
t3.setBorder(etched);
t3.setTitleColor(Color.white);
setBorder(t3);
setVisible(true);
setOpaque(true);
}
public void paintComponent(Graphics g) {
int potraithelp=334;
Graphics2D g2 = (Graphics2D)g;
super.paintComponent(g2);
g2.setColor(Color.white);
g2.drawString("Score: "+gi.getScore(), 5, 50);
g2.drawString("Lifes:", 300, 50);
for(int i=0;i< gi.getLifes();i++) {
g2.drawImage(io.ImageLoader.getActor("froggerpotrait"),potraithelp,50-17,null); //Position vorgeben, rest student?
potraithelp+=34;
}
}
}
class FroggerStartPanel extends JPanel{
Frogger help = gi.getCurr();
public FroggerStartPanel() {
setPreferredSize(new Dimension(600,100));
setBackground(Color.GREEN);
setOpaque(true);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setBackground(Color.green);
help.paint(g2);
}
}
class MoveListener implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN) {
gi.getCurr().moveDown();
}
if(e.getKeyCode()==KeyEvent.VK_UP) {
gi.getCurr().moveUp();
}
if(e.getKeyCode()==KeyEvent.VK_LEFT) {
gi.getCurr().moveLeft();
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
gi.getCurr().moveRight();
}
fstp.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}
GameInstance:
Java:
public class GameInstance {
private int lifes;
private boolean gameActive;
private boolean paused;
private int score;
private Frogger curr;
public GameInstance() {
this.lifes =3;
this.score=0;
this.curr = new Frogger(ActorType.FROGGER);
//curr.setLocation(0, 50);
}
public void addScore(int n) {
this.score+=n;
}
public int getScore() {
return this.score;
}
public int getLifes() {
return this.lifes;
}
public void loseLife() {
this.lifes--;
}
public Frogger getCurr() {
return this.curr;
}
}
Spielerklasse:
Java:
public class Frogger extends GameObject {
public Frogger(ActorType type) {
super(type);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(this.getImg(), this.getX(),this.getY(), 50, 50, null); //Testwerte
}
public void moveDown() {
this.move(0, 1);
}
public void moveUp() {
this.move(0, -1);
}
public void moveRight() {
this.move(1, 0);
}
public void moveLeft() {
this.move(-1, 0);
}
public void move(int x,int y) {
this.setLocation(x, y);
}
}
Sieht hier irgendwer den Fehler, den ich einfach nicht sehe??