Java Figur springen lassen?
Hallo, wie kann ich meine Figur springen lassen?
Hier mein Code:
package pack1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class jump extends JPanel implements ActionListener, KeyListener{
Timer t = new Timer(5, this);
private static int x = 0, velX = 0, y = 390, velY = 0;
public jump() {
t.start();
addKeyListener(this);
setFocusable(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(x, y, 40, 40);
g.setColor(Color.green);
g.fillRect(0, 425, 500, 40);
}
public void actionPerformed(ActionEvent ae) {
x = x + velX;
y = y + velY;
repaint();
}
public void keyPressed(KeyEvent e) {
int c = e.getKeyCode();
if(c == KeyEvent.VK_RIGHT) {
velX = 3;
velY = 0;
}if(c == KeyEvent.VK_LEFT) {
velX = -3;
velY = 0;
}
}
public void keyReleased(KeyEvent e) {
int c = e.getKeyCode();
if(c == KeyEvent.VK_RIGHT) {
velX = 0;
velY = 0;
}
}
public void keyTyped(KeyEvent e) {
}
public static void main(String[] args) {
jump j = new jump();
JFrame f1 = new JFrame("Jump-and-run");
f1.add(j);
f1.setSize(500, 500);
f1.setVisible(true);
}
}
evtl. so ?:
public void key Pressed(KeyEvent e){
if(c == KeyEvent.VK_SPACE) {
velX = 0;
velY = 3;
}
}
public void keyReleased(KeyEvent e) {
if(c == KeyEvent.VK_SPACE) {
velX = 0;
velY = -3;
}
}
2 Antworten
Hey! Du brauchst ne Erdanziehungskraft!
Dein Pressed sieht gut aus! Du brauchst da aber noch einen check, ob du in der Luft bist. Ansonsten kannst du ja "unendlichen Doppelsprung" machen - also einfach auf Pfeil oben hämmern und so unendlich hoch springen.
Beim keyReleased machst du erst einmal gar nichts. Ja - ich weiß. Du wirst es so haben wollen, dass wenn man länger auf oben drückt, man weiter springt. Das implementierst du aber genau anders herum: Wenn man aufhört nach oben zu drücken, gehts schneller nach unten. Aber das ist zweitrangig.
velY ist deine Geschwindigkeit. Was du brauchst ist eine Beschleunigung! Nichts anderes ist die Erdanziehungskraft nämlich (und ohne die kannst logisch nicht springen).
Das heißt, in deiner Loop-Methode "actionPerformed" machst folgendes:
Wenn Collision.FigurStehtAufDemBoden {
Wenn velY < 0: velY = 0;
} SONST {
velY = velY - ERDBESCHLEUNIGUNG
}
Und eben das "velY = -3;" im Key-Released erst mal löschen - das sollte dann eine ziemlich pausible Flugbahn ergeben ;).
Grus
Tuxgamer
Kollision ;). Sollte nicht Deutsvh und Englisch mischen...
Irgendwann muss deine Spielfigur doch am Boden aufkommen, oder? Also z.B if(y<=0) - wenn du sagst, dass bei y=0 der Boden ist.
Und wie sieht dan der keyPressed mit der Leertaste also SPACE aus ?
weil er wenn man springt sich nicht bewegen soll
Beim Tastendruck erhöhst du immer die y-Koordinate bis zur maximalen Höhe und anschließend wieder mindern.
Was heißt Collision, sorry weiß noch nicht so viel bin erst 10 aber den Code habe ich geschrieben