Tastensteuerung im Spiel

Blagg Dogg

Mitglied
hi,

nochmal ne kurze frage: ich habe angefangen ein spiel zu schreiben und schon ein bild geladen. dieses lässt sich aber nicht mit der taste "D" verschieben, so wie ich es eigentlich prorammiert habe... kann mir da wer helfen bitte:

Java:
package de.sack.main;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class WesternPanel extends JPanel implements Runnable {

	private JFrame frame;
	private Thread thread;
	private BackGround bg;
	private int nr = 1;

	public WesternPanel(int width, int height) {
		setPreferredSize(new Dimension(width, height));
		frame = new JFrame("WestWorld by Blagg Dogg 2012 (c)");
		frame.add(this);
		frame.pack();
		intitialize();
		frame.setVisible(true);
		frame.setResizable(false);

		thread = new Thread(this);
		thread.start();
	}

	private void intitialize() {
		bg = new BackGround();
		addKeys();
	}

	public static void main(String[] args) {
		new WesternPanel(1200, 480);

	}

	@Override
	public void run() {
		while (true) {
			System.out.println("Thread runs");
								
			moveGameObjects();

			repaint();

			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		System.out.println("Repaint NO.: " + nr++);
		bg.draw(g);
	}
	


	private void moveGameObjects() {
		// TODO Auto-generated method stub

	}

	private void addKeys() {
		this.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent arg0) {
				int key = arg0.getKeyCode();
				if(key == KeyEvent.VK_D){
					bg.setPos(bg.getPos()-10);
				}
				
			}
			
			@Override
			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyPressed(KeyEvent arg0) {
				int key = arg0.getKeyCode();
				if(key == KeyEvent.VK_D){
					bg.setPos(bg.getPos()-10);
				}
				
			}
		});
	}

}

Java:
package de.sack.main;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class BackGround extends JPanel {

	private static final long serialVersionUID = 1L;
	BufferedImage bg;
	private int pos = 0;

	public int getPos() {
		return pos;
	}

	public void setPos(int pos) {
		this.pos = pos;
	}

	public BackGround() {
		URL picURL = getClass().getClassLoader().getResource("bg/pan_005.jpg");

		try {
			bg = ImageIO.read(picURL);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void draw(Graphics g) {
		g.drawImage(bg, pos, 0, null);
	}

}
 
Und selbst hast du schon was versucht?
System.out.println(); heißt das Zauberwort!
1.) Prüfen ob bei einem Tastendruck auch wirklich ein Tastendruck im Programm ankommt, wäre jetzt mal meine Aussage. System.out.println( "Taste gedrückt" );
2.) Prüfen ob der Tastendruck D auch als D im Programm ankommt

Der Code scheint für mich im Moment richtig zu sein... aber das ist er ja eig. immer bis man ihn durch den Compiler jagt 😀
 
Dann hast du keinen Fokus auf das Programm bzw. auf das JPanel. Ich bin mir nicht sicher ob da sAbsicht ist oder ein Bug in Java, aber mit dem JPanel scheint manchmal die Listener nicht zu funktionieren.
Adde den KeyListener deinem JFrame, also statt
this.addKeyListener...
frame.addKeyListener...
 

Zurück
Oben