Applets - mehrere Tasten gleichzeitig abfragen

mryoyoyo700

Mitglied
Ich fang grad bissl mit Java an, und wollte ein Spiel machen, in dem man mit den Pfeiltasten ein Rechteck bewegt. Leider wird immer nur eine Taste ausgewertet. Das Rechteck kann sich also nicht in x und y Richtung bewegen....

Danke im Vorraus ;)

Java:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class MainCode extends Applet implements Runnable, KeyListener {

	private static final long serialVersionUID = 1L;
	public static int width = 500, height = 500;
	public static float maxFrameRate = 60.0f;

	Image backbuffer;
	Graphics backb;

	int x;
	int y;
	int speed = 4;

	public void init() {
		this.addKeyListener(this);
		new Thread(this).start();

	}

	public void run() {

		backbuffer = this.createImage(width, height);
		backb = backbuffer.getGraphics();
		backb.setColor(Color.white);

		while (true) {
			repaint();
			try {
				Thread.sleep((long) (1000.0f / maxFrameRate));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public void paint(Graphics g) {
		super.paint(g);

		backb.setColor(Color.black);
		backb.fillRect(0, 0, width, height);
		backb.setColor(Color.red);
		backb.fillRect(x, y, 10, 50);

		g.drawImage(backbuffer, 0, 0, this);

	}

	public void keyTyped(KeyEvent e) {
	}

	public void keyPressed(KeyEvent e) {

		int kc = e.getKeyCode();

		if (e.getKeyCode() == KeyEvent.VK_LEFT)
			x -= speed;
		if (e.getKeyCode() == KeyEvent.VK_RIGHT)
			x += speed;
		if (e.getKeyCode() == KeyEvent.VK_UP)
			y -= speed;
		if (e.getKeyCode() == KeyEvent.VK_DOWN)
			y += speed;
	}

	public void keyReleased(KeyEvent e) {
	}

}
 

Marco13

Top Contributor
Es gibt da viele Möglichkeiten, insbesondere wenn Threads und repainting und ggf. weitere Aktionen zusammenkommen, aber die pragmatischste und auf dieser Ebene einleuchtendste wäre vermutlich, zwei Variablen zu machen: speedX und speedY. Wenn man links/rechts drückt, wird speedX auf +/-speed gesetzt (und wenn man losläßt, wieder auf 0). Genauso für oben/unten mit speedY. In der Schleife werden dann der aktuelle speedX und speedY auf x bzw. y draufaddiert.

Applet ist übrigens AWT und eigentlich veraltet, man sollte eher Swing (JApplet) verwenden. Da spart man sich auch den Krampf mit dem BackBuffer. Allerdings sollte das Zeichnen in beiden Fällen von einer eigenen Component gemacht werden, die nur im Applet liegt, aber... es ist ja der erste Versuch. Schau vielleicht trotzdem mal sowas wie http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html
 

mryoyoyo700

Mitglied
Danke schon mal für die Hilfe. Es funktioniert im Applet Viewer von Eclipse schon mal gut,
aber wenn ich es im Browser ausführe, hat das Applet keinen Focus ;(

Weiß wer woran das liegt?
 

Marco13

Top Contributor
"Die Ursache" ist schwer zu benennen. Einmal ins Applet reinklicken sollte schon reichen. Man kann ggf. mal versuchen, ob es durch ein
requestFocusInWindow();
in der 'start'-Methode schon behoben ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Logitech G15/G510 Applets programmieren Spiele- und Multimedia-Programmierung 3
M Würdet ihr sagen Java Applets eignen sich gut Spiele- und Multimedia-Programmierung 5
D Highscoreliste eines Applets funktioniert online nicht Spiele- und Multimedia-Programmierung 4
P Bekomme Java 3D Applets nicht zum Laufen Spiele- und Multimedia-Programmierung 4
B Mehrere Klassen auf JFrame Spiele- und Multimedia-Programmierung 3
N Mehrere Rechtecke in großes Quadrat einzeichnen Spiele- und Multimedia-Programmierung 5
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
staxx6 (Slick) Steuerung - mehrere Belegungen Spiele- und Multimedia-Programmierung 12
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
R Mehrere Shader in einem Program Spiele- und Multimedia-Programmierung 8
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
S Ein Thread für alle Animationen oder mehrere? Spiele- und Multimedia-Programmierung 2
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: mehrere ViewingPlaforms in Sonnensystem Spiele- und Multimedia-Programmierung 8
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
hdi mehrere Threads/Tasks in einem synchronisieren -> TaskPoo Spiele- und Multimedia-Programmierung 36
S Java3D - mehrere Instanzen eines Geometrieobjektes erzeugen Spiele- und Multimedia-Programmierung 3
V Ein oder mehrere GIF-Grafiken zusammenfügen Spiele- und Multimedia-Programmierung 3
M mehrere PNG in eine Datei Spiele- und Multimedia-Programmierung 3
L Wie kann ich mehrere Texturen auf ein Object File mappen Spiele- und Multimedia-Programmierung 4
D mehrere Graphiken erstellen und ihre Position definieren Spiele- und Multimedia-Programmierung 4
A Mit KeyListener zwei Tasten gleichzeitig abfragen Spiele- und Multimedia-Programmierung 2
D 2 Tasten gleichzeitig gedrückt halten. Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben