Hallo,
um mich mit JavaFx ein bisschen mehr ausseinanderzusetzen, wollte ich ein kleines Spiel programmieren. Nun bin ich auf das Problem gestoßen, dass ich zwar dem Pane einen KeyListener hinzufügen kann, dieser aber nicht reagiert.
Ich weiß, dass die KeyListener ohne Probleme funktionieren, wenn ich sie zur Scene hinzufüge, aber das löst mein Problem nicht (;
Kann man den Focus auf das Pane setzen ?
Hier mein Code :
Danke
um mich mit JavaFx ein bisschen mehr ausseinanderzusetzen, wollte ich ein kleines Spiel programmieren. Nun bin ich auf das Problem gestoßen, dass ich zwar dem Pane einen KeyListener hinzufügen kann, dieser aber nicht reagiert.
Ich weiß, dass die KeyListener ohne Probleme funktionieren, wenn ich sie zur Scene hinzufüge, aber das löst mein Problem nicht (;
Kann man den Focus auf das Pane setzen ?
Hier mein Code :
Code:
package sample;
import javafx.animation.Animation;
import javafx.animation.AnimationTimer;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
/**
* Created by Robin on 23.10.2015.
*/
public class Game extends Pane {
private MainCharacter character;
private ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();
public Game(){
character = new MainCharacter();
character.moveHero(250, 250);
this.getChildren().add(character.view);
this.setStyle("-fx-background-color:white");
this.setOnKeyPressed((e) -> {
switch (e.getCode()) {
case UP:
character.north = true;
break;
case DOWN:
character.south = true;
break;
case LEFT:
character.west = true;
break;
case RIGHT:
character.east = true;
break;
}
System.out.println("test");
});
this.setOnKeyReleased((e) -> {
switch (e.getCode()) {
case UP:
character.north = false;
break;
case DOWN:
character.south = false;
break;
case LEFT:
character.west = false;
break;
case RIGHT:
character.east = false;
break;
}
});
AnimationTimer timer = new AnimationTimer(){
public void handle(long now){
character.move();
}
};
timer.start();
}
static class MainCharacter{
protected ImageView view;
protected Image heroImage;
protected boolean running,north,south,west,east;
public MainCharacter(){
try {
URL url = new URL("http://static.giantbomb.com/uploads/scale_small/8/87790/2469738-pacman.png");
Image image = new Image(url.toExternalForm(),70,70,true,true);
view = new ImageView(image);
}catch(IOException e){
e.printStackTrace();
}
}
public void moveHero(int x, int y){
int cx =(int)view.getBoundsInLocal().getWidth()/2;
int cy =(int)view.getBoundsInLocal().getHeight()/2;
if(x-cx>=0 && x+cx<500 && y-cy>=0 && y+cy<500){
view.relocate(x-cx,x-cy);
}
}
public void moveHeroBy(int dx, int dy){
int x =(int)view.getLayoutX()+dx+(int)view.getBoundsInLocal().getWidth()/2;
int y =(int)view.getLayoutY()+dy+(int)view.getBoundsInLocal().getHeight()/2;
moveHero(x,y);
}
public void move(){
int dx =0;
int dy=0;
if(north){
dy=-1;
}else if(south){
dy=1;
}else if(west){
dx=-1;
}else if(east){
dx=1;
}else if(running){
dx=dx*4;
}
moveHeroBy(dx,dy);
}
}
}
Danke