Kollisionsabfrage
This commit is contained in:
parent
241bd0f85b
commit
5894de5567
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -8,7 +8,6 @@ import javafx.scene.control.Button;
|
|||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
|
||||||
import javafx.scene.input.KeyCode;
|
import javafx.scene.input.KeyCode;
|
||||||
import javafx.scene.layout.*;
|
import javafx.scene.layout.*;
|
||||||
import javafx.scene.paint.ImagePattern;
|
import javafx.scene.paint.ImagePattern;
|
||||||
@ -19,10 +18,7 @@ import javafx.util.Duration;
|
|||||||
//import java.awt.*;
|
//import java.awt.*;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLOutput;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
public class HappyBirdMain extends Application {
|
public class HappyBirdMain extends Application {
|
||||||
/* Formatierungsklasse */
|
/* Formatierungsklasse */
|
||||||
@ -106,13 +102,25 @@ public class HappyBirdMain extends Application {
|
|||||||
//gameRunning: das Spiel läuft/ GameScreen ist aufgerufen
|
//gameRunning: das Spiel läuft/ GameScreen ist aufgerufen
|
||||||
private boolean gameRunning;
|
private boolean gameRunning;
|
||||||
|
|
||||||
|
/*TranslateTransitions für obere und untere Pipes*/
|
||||||
private TranslateTransition top;
|
private TranslateTransition top;
|
||||||
private TranslateTransition bottom;
|
private TranslateTransition bottom;
|
||||||
private TranslateTransition birdTransition;
|
|
||||||
|
|
||||||
|
/*ArrayList, in die alle Transitions gespeichert werden*/
|
||||||
|
private final ArrayList<Transition> transitions = new ArrayList<Transition>();
|
||||||
|
|
||||||
|
/*Rechteck für den Bird*/
|
||||||
|
private Rectangle happyBird;
|
||||||
|
|
||||||
|
/*ArrayList, in der alle Rechtecke/ Pipes gespeichert werden*/
|
||||||
|
private final ArrayList<Rectangle> pipesArrayList = new ArrayList<Rectangle>();
|
||||||
|
|
||||||
|
/*Timeline, auf der sich die Pipes und der Vogel abspielen*/
|
||||||
private Timeline timeline;
|
private Timeline timeline;
|
||||||
private final ArrayList<Transition> transitions = new ArrayList<Transition>();;
|
|
||||||
|
/*AnimationTimer checkt im Spielverlauf, ob eine Pipe mit dem Bird kollidiert*/
|
||||||
|
private AnimationTimer collisionChecker;
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch(args);
|
launch(args);
|
||||||
@ -141,6 +149,27 @@ public class HappyBirdMain extends Application {
|
|||||||
stage.show();
|
stage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Erstellt den Bird als Rectangle mit einem Bild.
|
||||||
|
* @return happyBird ein Rectangle
|
||||||
|
*/
|
||||||
|
public Rectangle createBird() {
|
||||||
|
/* Startposition des Birds */
|
||||||
|
int y = 325;
|
||||||
|
int x = 50;
|
||||||
|
|
||||||
|
/* Erstellen eines Rechtecks mit der passenden Größe */
|
||||||
|
Rectangle happyBird = new Rectangle(x,y,45,30);
|
||||||
|
|
||||||
|
/* Bild in das Rechteck setzen */
|
||||||
|
happyBird.setFill(new ImagePattern(bird));
|
||||||
|
|
||||||
|
/* View-Order auf 1 setzen, damit der Bird über den anderen Elementen auf dem Spielscreen liegt */
|
||||||
|
happyBird.setStyle("-fx-view-order: 1");
|
||||||
|
|
||||||
|
return happyBird;
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Erstellt zwei Pipes als Rectangle und fügt ihnen eine Animation über eine Transition hinzu
|
* Erstellt zwei Pipes als Rectangle und fügt ihnen eine Animation über eine Transition hinzu
|
||||||
* @return pipes zwei Rectangles
|
* @return pipes zwei Rectangles
|
||||||
@ -158,45 +187,39 @@ public class HappyBirdMain extends Application {
|
|||||||
* +400 +250, für Abstand zwischen oberer Pipe und unterer Pipe */
|
* +400 +250, für Abstand zwischen oberer Pipe und unterer Pipe */
|
||||||
Rectangle bottomPipe = new Rectangle(900, y + 400 + 250, 91, 500);
|
Rectangle bottomPipe = new Rectangle(900, y + 400 + 250, 91, 500);
|
||||||
|
|
||||||
/* oberer Pipe ein Hintergrundbild geben */
|
/* Pipes in PipesArrayList schreiben */
|
||||||
Image img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeTop.png");
|
pipesArrayList.add(topPipe);
|
||||||
topPipe.setFill(new ImagePattern(pipeTop));
|
pipesArrayList.add(bottomPipe);
|
||||||
topPipe.setStyle("-fx-view-order: 1");
|
|
||||||
|
|
||||||
/* unterer Pipe ein Hintergrundbild geben */
|
/* Pipes einen Hintergrundbild geben */
|
||||||
img = new Image("file:src/main/resources/com/example/happy_bird/pics/PipeBottom.png");
|
topPipe.setFill(new ImagePattern(pipeTop));
|
||||||
bottomPipe.setFill(new ImagePattern(pipeBottom));
|
bottomPipe.setFill(new ImagePattern(pipeBottom));
|
||||||
|
|
||||||
|
/* View-Order auf 1 setzen, damit die Pipe über den anderen Elementen auf dem Spielscreen liegt */
|
||||||
|
topPipe.setStyle("-fx-view-order: 1");
|
||||||
bottomPipe.setStyle("-fx-view-order: 1");
|
bottomPipe.setStyle("-fx-view-order: 1");
|
||||||
|
|
||||||
/* neue Animationen über TranslateTransitions */
|
/* neue Animationen über TranslateTransitions */
|
||||||
top = new TranslateTransition();
|
top = new TranslateTransition();
|
||||||
bottom = new TranslateTransition();
|
bottom = new TranslateTransition();
|
||||||
|
|
||||||
/* top-Transition die obere Pipe hinzufügen */
|
/* Pipes den Transitions hinzufügen */
|
||||||
top.setNode(topPipe);
|
top.setNode(topPipe);
|
||||||
|
|
||||||
/* die Pipe braucht 7 Sekunden, bis sie von rechts nach links gelaufen ist */
|
|
||||||
top.setDuration(Duration.seconds(7));
|
|
||||||
|
|
||||||
/* Pipe läuft 1100px nach links */
|
|
||||||
top.setToX(-1100);
|
|
||||||
|
|
||||||
/* nach Erreichen des linken Randes, wird topPipe von Pane entfernt */
|
|
||||||
top.setOnFinished(e -> {
|
|
||||||
pane.getChildren().remove(topPipe);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/* top-Transition die untere Pipe hinzufügen */
|
|
||||||
bottom.setNode(bottomPipe);
|
bottom.setNode(bottomPipe);
|
||||||
|
|
||||||
/* die Pipe braucht 7 Sekunden, bis sie von rechts nach links gelaufen ist */
|
/* die Pipes brauchen 7 Sekunden, bis sie von rechts nach links gelaufen ist */
|
||||||
|
top.setDuration(Duration.seconds(7));
|
||||||
bottom.setDuration(Duration.seconds(7));
|
bottom.setDuration(Duration.seconds(7));
|
||||||
|
|
||||||
/* Pipe läuft 1100px nach links */
|
/* Pipe läuft 1100px nach links */
|
||||||
|
top.setToX(-1100);
|
||||||
bottom.setToX(-1100);
|
bottom.setToX(-1100);
|
||||||
|
|
||||||
/* nach Erreichen des linken Randes, wird topPipe von Pane entfernt */
|
|
||||||
|
/* nach Erreichen des linken Randes, wird die Pipe von Pane entfernt */
|
||||||
|
top.setOnFinished(e -> {
|
||||||
|
pane.getChildren().remove(topPipe);
|
||||||
|
});
|
||||||
bottom.setOnFinished(e -> {
|
bottom.setOnFinished(e -> {
|
||||||
pane.getChildren().remove(bottomPipe);
|
pane.getChildren().remove(bottomPipe);
|
||||||
});
|
});
|
||||||
@ -211,7 +234,10 @@ public class HappyBirdMain extends Application {
|
|||||||
return pipes;
|
return pipes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Generiert den GameScreen durch Ausblenden und
|
||||||
|
* Sichtbarmachen der richtigen Buttons, Labels, ...
|
||||||
|
*/
|
||||||
public void generateMenueScreen() {
|
public void generateMenueScreen() {
|
||||||
dataQuery();
|
dataQuery();
|
||||||
menuScreenRunning = true;
|
menuScreenRunning = true;
|
||||||
@ -344,11 +370,11 @@ public class HappyBirdMain extends Application {
|
|||||||
startGameButton.setVisible(false);
|
startGameButton.setVisible(false);
|
||||||
menuButton.setVisible(false);
|
menuButton.setVisible(false);
|
||||||
|
|
||||||
/*Vogel hinzufügen, bisher nur als Bild*/
|
/*Vogel hinzufügen, bisher nur als Bild
|
||||||
ImageView birdView = new ImageView(bird);
|
ImageView birdView = new ImageView(bird);
|
||||||
pane.getChildren().add(birdView);
|
pane.getChildren().add(birdView);
|
||||||
birdView.setLayoutY(325);
|
birdView.setLayoutY(325);
|
||||||
birdView.setLayoutX(50);
|
birdView.setLayoutX(50);*/
|
||||||
|
|
||||||
/*Pipes oben, unten hinzufügen, bisher nur als Bild
|
/*Pipes oben, unten hinzufügen, bisher nur als Bild
|
||||||
ImageView upperPipeView = new ImageView(upperPipe);
|
ImageView upperPipeView = new ImageView(upperPipe);
|
||||||
@ -372,14 +398,62 @@ public class HappyBirdMain extends Application {
|
|||||||
pane.getChildren().add(pipe);
|
pane.getChildren().add(pipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*Transitions abspielen*/
|
/*Transitions abspielen*/
|
||||||
top.play();
|
top.play();
|
||||||
bottom.play();
|
bottom.play();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
timeline.setCycleCount(Animation.INDEFINITE);
|
/*timelineBird = new Timeline(new KeyFrame(Duration.seconds(50), e -> {
|
||||||
|
Rectangle happyBird = createBird();
|
||||||
|
pane.getChildren().add(happyBird);
|
||||||
|
birdTransition.play();
|
||||||
|
}));*/
|
||||||
|
|
||||||
|
happyBird = createBird();
|
||||||
|
pane.getChildren().add(happyBird);
|
||||||
|
|
||||||
|
timeline.setCycleCount(Animation.INDEFINITE);
|
||||||
timeline.play();
|
timeline.play();
|
||||||
|
|
||||||
|
System.out.println("tl: "+timeline.getStatus());
|
||||||
|
|
||||||
|
collisionChecker = new AnimationTimer() {
|
||||||
|
@Override
|
||||||
|
public void handle(long timestamp) {
|
||||||
|
for (Rectangle rectangle : pipesArrayList) {
|
||||||
|
if(rectangle != null){
|
||||||
|
checkCollision(happyBird,rectangle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
collisionChecker.start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Überprüft, ob eine Pipe mit dem Bird kollidiert
|
||||||
|
* @param happyBird Rechteck mit dem Bird
|
||||||
|
* @param pipe Rechteck mit einer Pipe
|
||||||
|
*/
|
||||||
|
public void checkCollision(Rectangle happyBird, Rectangle pipe) {
|
||||||
|
|
||||||
|
/* Überprüft, ob eine der Grenzen des Rechtecks des Birds mit einer übergebenen Pipe kollidiert
|
||||||
|
* wenn ja, hält das Spiel an bzw. wird beendet */
|
||||||
|
if(happyBird.getBoundsInParent().intersects(pipe.getBoundsInParent())) {
|
||||||
|
|
||||||
|
/*Pausieren der Transitions/ Pipes*/
|
||||||
|
for(Transition transition : transitions) {
|
||||||
|
transition.pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Pausieren der Timeline, sodass keine neuen Pipes spawnen*/
|
||||||
|
timeline.stop();
|
||||||
|
gameRunning = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
@ -568,7 +642,7 @@ public class HappyBirdMain extends Application {
|
|||||||
|
|
||||||
/*Klick auf den Pause-Button, um das Pause-Menü aufzurufen*/
|
/*Klick auf den Pause-Button, um das Pause-Menü aufzurufen*/
|
||||||
pauseButton.setOnAction(event -> {
|
pauseButton.setOnAction(event -> {
|
||||||
if(!menuScreenRunning) {
|
if (!menuScreenRunning) {
|
||||||
pauseButtonClick(gameRunning);
|
pauseButtonClick(gameRunning);
|
||||||
gameRunning = !gameRunning;
|
gameRunning = !gameRunning;
|
||||||
}
|
}
|
||||||
@ -576,7 +650,7 @@ public class HappyBirdMain extends Application {
|
|||||||
|
|
||||||
/*ESC-Tast drücken, um das Pause-Menü aufzurufen*/
|
/*ESC-Tast drücken, um das Pause-Menü aufzurufen*/
|
||||||
scene.setOnKeyPressed(e -> {
|
scene.setOnKeyPressed(e -> {
|
||||||
if(e.getCode() == KeyCode.ESCAPE && !menuScreenRunning) {
|
if (e.getCode() == KeyCode.ESCAPE && !menuScreenRunning) {
|
||||||
pauseButtonClick(gameRunning);
|
pauseButtonClick(gameRunning);
|
||||||
gameRunning = !gameRunning;
|
gameRunning = !gameRunning;
|
||||||
}
|
}
|
||||||
@ -866,8 +940,6 @@ public class HappyBirdMain extends Application {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* public void generateEndScreen() generiert den Endscreen - sobald das Spiel beendet ist
|
* public void generateEndScreen() generiert den Endscreen - sobald das Spiel beendet ist
|
||||||
* (man verloren hat). Es werden die Punkte des Spielers angezeigt, und es bestehen die Möglichkeiten,
|
* (man verloren hat). Es werden die Punkte des Spielers angezeigt, und es bestehen die Möglichkeiten,
|
||||||
|
Loading…
Reference in New Issue
Block a user