Java getKeyCode benutzen

SparkMonkay

Commander
Registriert
Feb. 2013
Beiträge
2.337
Moin,

ich hatte ne nette Idee für ein kleines Spielchen, nur ist mein Problem gerade zu verstehen wie die KeyEvents funktionieren.

Hier erstmals mein Code:

Code:
import java.awt.event.KeyEvent;


public class TEST{

	
	public void keyPressed(KeyEvent e) {
    System.out.println("Press");
    switch (e.getKeyCode()){
        case KeyEvent.VK_A :
            System.out.println("A");
            break;
        case KeyEvent.VK_B:
            System.out.println("A");
            break;
//USW.
        }
    }
	public static void main(String[]args){
/********************
 * TEST TEST  TEST  *
 ********************/
		craft.keyPressed(e);
	}
}

Ok, das hier ist nur eine extra Datei, in der ich versuche einen Codeauschnitt abgeändert auf ein minimum zum Laufen zu bringen.

Mein Ziel: Ich möchte zZ nur die Pfeiltasten VK_LEFT und VK_RIGHT benutzen können. Diese Methoden, soll die X-Koordinaten von einer Platte
verändern. Also es soll diese Platte nach links und rechts geschoben werden.

Nun, wie benutze ich die Methode? Durch Google, bin ich zu keiner wirklichen Erkentniss gekommen.
Was muss hier anders sein?
Wahrscheinich so einiges.


Danke für hilfreiche Antworten und für eure Zeit ^^

//EDIT
Hier das "Hauptprogramm", wo ich meine" "Platte " verschieben möchte,
ACHTUNG: Wenn du das Compilen willst, musst du StdDraw im selben Ordner haben, oder importieren!
Hier ist einmal StdDraw: 'klick'


Code:
public class Game{
	public static void main(String[]args){
						
int x1_sc =0;                   //setXscale, first  koordinate 
int x2_sc =100;			//setXscale, second koordinate
int y1_sc =0;			//setYscale, first  koordinate
int y2_sc =100;			//setXscale, second koordinate

int square=50;			//koordinates of the filled square (center is (50,50) and rad is 50)

int x_pos =50;			//koordinate of the ball
int y_pos =7;			//
int rad   =2;			// radius of the ball
int x_sp  =2;			//Movementspeed of the ball
int y_sp  =1;			//Movementspeed of the ball

int x_Rect=50;
					
//The area
	StdDraw.setXscale(x1_sc,x2_sc);
	StdDraw.setYscale(y1_sc,y2_sc);

while(true){


//The background	
	StdDraw.setPenColor(StdDraw.BLACK);
	StdDraw.filledSquare(square,square,square);


//Your "pannel"
	StdDraw.setPenColor(StdDraw.RED);        //  <---- Die Koordinaten von dem Teil sollen hin und her geschoben werden
	StdDraw.filledRectangle(x_Rect,5,10,1);    // und dass wollte ich mittels dem getKeyCode umsetzten


//The lower boarder
	StdDraw.setPenColor(StdDraw.BLUE);
	StdDraw.line(0,2,100,2);


//Your ball ^_^  
	StdDraw.setPenColor(StdDraw.CYAN);
	StdDraw.filledCircle(x_pos,y_pos,rad);


//The ball has to bounce , from the walls
	     if((Math.abs(x_pos+x_sp)+rad)> 100) { x_sp=(-x_sp); }
	else if((Math.abs(y_pos+y_sp)+rad)> 100) { y_sp=(-y_sp); }
	else if((Math.abs(y_pos+y_sp)-rad)<=  0) { y_sp=(-y_sp); }
    else if((Math.abs(x_pos+x_sp)-rad)<=  0) { x_sp=(-x_sp); }


//Movement
 	x_pos=x_pos+x_sp;
 	y_pos=y_pos+y_sp;

	StdDraw.show(20);
		}
	}	
}
Nun stellt sich die Frage: Ist es so möglich?
 
Zuletzt bearbeitet:
Ich benutze Sublime Text 2 und den Java Compiler.
Ich wollte es mittels StdDraw (als GUI) zum laufen bekommen, Mein "Spielobjekt" hüpft schon erfreut durch die Gegend.

Ich nehme an, du willst wissen, mit "was" ich das in ein GUI umsetzte oder?
 
Das war dann wohl ein bisschen zuviel Minimum...

Welche Platte?
Wo ist der KeyListener registriert?

Vielleicht würde es hier mehr bringen, wenn du die tatsächliche Klasse zeigen würdest, wo du versuchst die "Platte" zu verschieben.
 
ok, werde es in einem Spoiler in dem Startpost nacheditieren.
 
@tnoy
Sieht für mich nach AWT aus. Aber was hat bitte eine UI Library wie Swing mit einer IDE wie NetBeans zu tun?

Greetz
hroessler
 
static boolean isKeyPressed(int keycode)
Is the keycode currently being pressed? This method takes as an argument the keycode (corresponding to a physical key).
void keyPressed(java.awt.event.KeyEvent e)
This method cannot be called directly.
void keyReleased(java.awt.event.KeyEvent e)
This method cannot be called directly.
void keyTyped(java.awt.event.KeyEvent e)
This method cannot be called directly.
Siehe: http://introcs.cs.princeton.edu/java/stdlib/javadoc/StdDraw.html

Ich kenne zwar StdDraw nicht, aber du müsstest wahrscheinlich StdDraw.isKeyPressed(int keycode) verwenden.

Wenn du es selber implementierst, so wie das bei dir der Fall ist, müsstest du einen eigenen KeyListener implementieren und das sieht im moment nicht so aus, als ob das das Ziel wäre.
 
Ok, vielen danke für den Hinweis.

ich werde dann nun

  • isKeyPressed
  • keyPressed

ausprobieren.
 
Da keyPressed nicht static ist, wirst du diese nicht so aufrufen können. Sollte dir aber beim kompilieren an den kopf geworfen werden.
 
Zurück
Oben