Javafx intersec funktioniert nicht?
class GameWindow {
int circleX = 0;
int circleY = 0;
int maxX = 500;
int maxY = 500;
Circle circle,circlerand;
HBox root;
public void fenster()
{
figure();
Stage stage = new Stage();
root = new HBox();
create();
if(circle.getBoundsInParent().intersects(circlerand.getBoundsInParent())){
System.out.println("circle x =" + circle.getCenterX() + " circlrand x =" + circlerand.getCenterX());
System.out.println("GameWindow.fenster() getroffen");
root.getChildren().remove(circlerand);
create();
}
Scene scene = new Scene(root,maxX, maxY);
scene.setOnKeyPressed((KeyEvent event) -> {
switch (event.getCode()) {
case UP -> {
if(circleY >= 2)
{
circleY -= 1;
circle.setTranslateY(circleY);
System.out.println("circle Y =" + circleY);
}
}
case DOWN -> {
if(circleY <= (maxY - 42)){
circleY += 1;
circle.setTranslateY(circleY);
System.out.println("circle Y =" + circleY);
}
}
case LEFT -> {
if(circleX >= 0){
circleX -= 1;
circle.setTranslateX(circleX);
System.out.println("circle x = " + circleX);
}
}
case RIGHT -> {
if(circleX <= maxX - 30){
circleX += 1;
circle.setTranslateX(circleX);
System.out.println("circle x =" + circleX);
}
}
case SHIFT -> {
System.out.println("circlerand x =" + circlerand.getCenterX() + " y=" + circlerand.getCenterY());
System.out.println("circle x = " + circle.getCenterX() + " y = " + circle.getCenterY());
}
}
});
root.getChildren().addAll(circle);
stage.setScene(scene);
stage.show();
}
private void figure(){
circle = new Circle(circleX,circleY,15);
}
private void create(){
Random rand = new Random();
int x = rand.nextInt(450);
int y = rand.nextInt(450);
circlerand = new Circle(x,y,10);
circlerand.setTranslateX(x);
circlerand.setTranslateY(y);
System.out.println("circlerand x =" + circlerand.getCenterX() + " y=" + circlerand.getCenterY());
root.getChildren().add(circlerand);
}
}
Moin, ich möchte abfragen ob 2 Kreise kollidieren jedoch funktioniert es nicht. Jemand ne Idee woran es liegt?
1 Antwort
Es muss erst einmal zu einer Überschneidung kommen. Die Wahrscheinlichkeit dafür ist in deinem Fall allerdings etwas geringer, da du die Koordinaten für den zweiten Kreis (circlerand) via Zufallsgenerator berechnen lässt.
- Die Koordinaten des ersten Kreises (circle) liegen bei P(0/0), der Radius ist 15.
- Die Koordinaten des zweiten Kreises (circlerand) wiederum liegen irgendwo in der viereckigen Fläche zwischen Q(1/1) und R(450/450), je nachdem, welche Zufallszahl generiert wird. Der Radius ist 10.
Die Prüfung auf Überschneidung erfolgt einmal, wenn das Fenster erstellt wird.
Um eine Überschneidung nach Bewegen des Kreises zu ermitteln, muss die Prüfung auch nach jeder Kreisbewegung erfolgen.
also füge ich die Abfrage in den switch case Block ein wo ich die Bewegung durchführe?
Ja. Allerdings würde ich, da du dann ja für mehrere Fälle Code wiederholen müsstest, die Abfrage eher in eine Methode auslagern und die je relevantem Fall aufrufen.
Circle wird ja bewegt. Allerdings, selbst wenn die Kreise übereinander liegen, passiert nichts. Und in der Konsole wird, egal wo circle sich befindet, die Koordinaten x 0 y 0 ausgegeben