Ich arbeite an einem einfachen Projekt und ich kann nicht erreichen, wie man ein Zeichenobjekt als (a) überqueren. Ich meine zum Beispiel, wenn ich gleichzeitig die linke und die obere Pfeiltaste drücke, möchte ich, dass sich meine Zeichnungsmarke in Richtung Nordwesten bewegt. Mit einfachen if-Anweisungen in KeyListener
Methoden konnte ich es jedoch nicht erfüllen. Gibt es eine spezielle Möglichkeit, dies zu tun oder ein zusätzliches Paket? Hier ist mein Code:Java Moving Ball über
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import javax.swing.*;
import javax.swing.JPanel;
public class Top extends JPanel implements ActionListener, KeyListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Timer t = new Timer(5, this);
int xR = 0;int yR = 0; int zR = 0;
double x = 0, y = 0, xVel = 0, yVel = 0, width = 0, height = 0;
public Top() {
t.start();
setBackground(Color.black);
addKeyListener(this);
setFocusable(true);
}
public void actionPerformed(ActionEvent e) {
repaint();
x+=xVel;
y+=yVel;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setPaint(Color.blue);
g2d.fill(new Ellipse2D.Double(this.x, this.y, 50, 50));
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_DOWN) {
down();
}
if(keyCode == KeyEvent.VK_UP) {
up();
}
if(keyCode == KeyEvent.VK_RIGHT) {
right();
}
if(keyCode == KeyEvent.VK_LEFT) {
left();
}
}
public void down() {
this.yVel= 1;
this.xVel= 0;
}
public void up() {
this.yVel = -1;
this.xVel = 0;
}
public void left() {
this.xVel = -1;
this.yVel = 0;
}
public void right() {
this.xVel = 1;
this.yVel = 0;
}
@Override
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_DOWN ||
keyCode == KeyEvent.VK_UP ||
keyCode == KeyEvent.VK_RIGHT ||
keyCode == KeyEvent.VK_LEFT) {
xVel=0;
yVel=0;
}
}
}
* dieser Code hat nur Fähigkeit, eine Ellipse genau links nach rechts zu bewegen nach oben oder unten *
Sie müssen wahrscheinlich Ihren Code posten, um damit geholfen zu werden. – Jonatan
Wir wissen nicht, was Sie versucht haben, ohne etwas Code zu sehen, bitte posten Sie einige, damit wir keine Lösung erraten müssen – Chris
Die akzeptierte Antwort finden Sie hier: http://stackoverflow.com/questions/752999/ how-do-i-handle-multiple-key-drücken-in-java - es gibt kein "event" für mehrere Schlüssel, da die Tastatur sie als separate Ereignisse sendet –