Hallo zusammen
ich beschäftige mich in meiner Freizeit seit einigen Woche mit Java und hab schon verschiedenen Compiler Anwendungen erstellt.
Vor einigen tagen habe ich mit einem kleinen 2D Spiel begonnen.
Mein erstes Ziel war das ich mit den Pfeiltasten einen art "Würfel" bewegen kann.
Ganz einfach rechts, links, hoch, runter.
Jedoch komme ich zurzeit nicht weiter..
Ist Zustand:
- Fenster wird erstellt
- Würfel wird gezeichnet
- Tasteneingabe funktioniert
- Koordinaten des Würfels werden je nach drücken der Tasten verändert
Problem:
Der Würfel bewegt sich nicht.
Die Compiler Ausgabe sieht so aus:
[/URL][/IMG]
Alle 20ms (Tick) wird die Pos. neu berechnet und gezeichnet.
Danach wird die x pos und y pos ausgegeben (Startwert ist beides mal 50).
Jetzt kommt das was mich am meisten wundert. Ich lass die Koordinaten nur an einer stelle im Programm ausgeben. Aber sie sind nur nach jedem 2. Tick verändert.
Tick
50 Startpos x
50 Startpos y
Tick
65 Pos x nach Bewegung
34 Pos y nach Bewegung
Tick
50
50
Tick
86 Pos x nach Bewegung
23 Pos y nach Bewegung
usw.
Woran kann das liegen?
Wieso bewegt sich der Würfel nicht.
Ich hoffe jemand findet die Zeit und kann sich die Klassen anschauen.
Bin für jeden Tipp auch unabhängig von meinem Problem offen
Main
Window
Panel
Objekt
Würfel
Coordinate
ich beschäftige mich in meiner Freizeit seit einigen Woche mit Java und hab schon verschiedenen Compiler Anwendungen erstellt.
Vor einigen tagen habe ich mit einem kleinen 2D Spiel begonnen.
Mein erstes Ziel war das ich mit den Pfeiltasten einen art "Würfel" bewegen kann.
Ganz einfach rechts, links, hoch, runter.
Jedoch komme ich zurzeit nicht weiter..
Ist Zustand:
- Fenster wird erstellt
- Würfel wird gezeichnet
- Tasteneingabe funktioniert
- Koordinaten des Würfels werden je nach drücken der Tasten verändert
Problem:
Der Würfel bewegt sich nicht.
Die Compiler Ausgabe sieht so aus:


Alle 20ms (Tick) wird die Pos. neu berechnet und gezeichnet.
Danach wird die x pos und y pos ausgegeben (Startwert ist beides mal 50).
Jetzt kommt das was mich am meisten wundert. Ich lass die Koordinaten nur an einer stelle im Programm ausgeben. Aber sie sind nur nach jedem 2. Tick verändert.
Tick
50 Startpos x
50 Startpos y
Tick
65 Pos x nach Bewegung
34 Pos y nach Bewegung
Tick
50
50
Tick
86 Pos x nach Bewegung
23 Pos y nach Bewegung
usw.
Woran kann das liegen?
Wieso bewegt sich der Würfel nicht.
Ich hoffe jemand findet die Zeit und kann sich die Klassen anschauen.
Bin für jeden Tipp auch unabhängig von meinem Problem offen
Main
Java:
package pg1;
public class Main {
public static void main(String[] args) {
new Window();
}
}
Window
Java:
package pg1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Window extends JFrame {
/**
*
*/
private static final long serialVersionUID = 4037606884011315544L;
private final Panel GamePanel;
public Window() {
setTitle("Labyrinth");
setLocation(700, 400);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setFocusable(true);
requestFocus();
addKeyListener(new Panel());
this.GamePanel = new Panel();
add(GamePanel);
pack();
creatMenu();
}
public void creatMenu() {
JMenuBar menuBar = new JMenuBar();
this.setJMenuBar(menuBar);
JMenu pauseMenu = new JMenu("Beenden");
menuBar.add(pauseMenu);
addpauseMenuItems(pauseMenu);
}
public void addpauseMenuItems(JMenu pauseMenu) {
JMenuItem quitItem = new JMenuItem("Quit");
pauseMenu.add(quitItem);
quitItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
}
Panel
Java:
package pg1;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Panel extends JPanel implements KeyListener {
/**
*
*/
private static final long serialVersionUID = -8764891349435011352L;
private Würfel Würfel1;
private final Dimension prefSize = new Dimension(240, 240);
private Timer t;
public Panel() {
setFocusable(true);
setPreferredSize(prefSize);
InitGame();
startGame();
}
public void InitGame() {
creatGameObjects();
t = new Timer(20, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
doOnTick();
}
});
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
Würfel1.moveUp();
break;
case KeyEvent.VK_DOWN:
Würfel1.moveDown();
break;
case KeyEvent.VK_LEFT:
Würfel1.moveLeft();
break;
case KeyEvent.VK_RIGHT:
Würfel1.moveRight();
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
Würfel1.stopUpDown();
break;
case KeyEvent.VK_DOWN:
Würfel1.stopUpDown();
break;
case KeyEvent.VK_LEFT:
Würfel1.stopLeftRight();
break;
case KeyEvent.VK_RIGHT:
Würfel1.stopLeftRight();
break;
}
}
public void startGame() {
t.start();
}
public void creatGameObjects() {
Würfel1 = new Würfel(new Coordinate(50, 50), 20, 20, 1);
}
public void doOnTick() {
Würfel1.makeMove();
repaint();
System.out.println("Tick");
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Würfel1.paintMe(g);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
Objekt
Java:
package pg1;
public abstract class Objekte {
private Coordinate objektPos;
private int width;
private int hight;
private int movingDistanceX;
private int movingDistanceY;
public Objekte(Coordinate position, int width, int hight) {
this.objektPos = position;
this.width = width;
this.hight = hight;
}
public Coordinate getObjektPos() {
return objektPos;
}
public void setObjektPos(Coordinate objektPos) {
this.objektPos = objektPos;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHight() {
return hight;
}
public void setHight(int hight) {
this.hight = hight;
}
public int getMovingDistanceX() {
return movingDistanceX;
}
public void setMovingDistanceX(int movingDistanceX) {
this.movingDistanceX = movingDistanceX;
}
public int getMovingDistanceY() {
return movingDistanceY;
}
public void setMovingDistanceY(int movingDistanceY) {
this.movingDistanceY = movingDistanceY;
}
public void moveObject() {
objektPos.setX(objektPos.getX() + movingDistanceX);
objektPos.setY(objektPos.getY() + movingDistanceY);
System.out.println(getObjektPos().getX());
System.out.println(getObjektPos().getY());
}
public void makeMove() {
moveObject();
}
protected abstract void paintMe(java.awt.Graphics g);
}
Würfel
Java:
package pg1;
import java.awt.Color;
import java.awt.Graphics;
public class Würfel extends Objekte {
private int movingSpeed;
public Würfel(Coordinate position, int width, int hight, int movingSpeed) {
super(position, width, hight);
setMovingSpeed(movingSpeed);
}
public void moveUp() {
setMovingDistanceY(-movingSpeed);
}
public void moveDown() {
setMovingDistanceY(movingSpeed);
}
public void stopUpDown() {
setMovingDistanceY(0);
}
public void moveLeft() {
setMovingDistanceX(-movingSpeed);
}
public void moveRight() {
setMovingDistanceX(movingSpeed);
}
public void stopLeftRight() {
setMovingDistanceX(0);
}
public int getMovingSpeed() {
return movingSpeed;
}
public void setMovingSpeed(int movingSpeed) {
this.movingSpeed = movingSpeed;
}
public void makeMove() {
super.makeMove();
}
@Override
protected void paintMe(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(getObjektPos().getX(), getObjektPos().getY(), getWidth(),
getHight());
// System.out.println(getObjektPos().getX());
// System.out.println(getObjektPos().getY());
}
}
Coordinate
Java:
package pg1;
public class Coordinate {
private int x ;
private int y ;
public Coordinate(int x, int y) {
this.setX(x);
this.setY(y);
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}