aboutsummaryrefslogtreecommitdiff
path: root/Info/10/2/JumpNRun/arbeitsauftrag2.tex
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-04-17 20:44:47 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-04-17 20:44:47 +0200
commitc38d85decda449be5b7e557f6052d8ed3bd41cdc (patch)
tree31982e5432272788f945951cae587b31b44bf552 /Info/10/2/JumpNRun/arbeitsauftrag2.tex
parent102ab3bede6592dff2771fe5d818d0837f5d3308 (diff)
downloadunterricht-c38d85decda449be5b7e557f6052d8ed3bd41cdc.tar.gz
unterricht-c38d85decda449be5b7e557f6052d8ed3bd41cdc.zip
significantly improve jumpnrun material
* mention combining of collision detection and handling * specify the need to cast to InteractiveElement
Diffstat (limited to 'Info/10/2/JumpNRun/arbeitsauftrag2.tex')
-rw-r--r--Info/10/2/JumpNRun/arbeitsauftrag2.tex29
1 files changed, 27 insertions, 2 deletions
diff --git a/Info/10/2/JumpNRun/arbeitsauftrag2.tex b/Info/10/2/JumpNRun/arbeitsauftrag2.tex
index d09cc882..65175949 100644
--- a/Info/10/2/JumpNRun/arbeitsauftrag2.tex
+++ b/Info/10/2/JumpNRun/arbeitsauftrag2.tex
@@ -87,6 +87,7 @@ für alle Objekte
\end{defbox}
Die Methode \mintinline{java}{getCollidingShapes(Group g)} eines Sprites gibt alle Objekte einer Gruppe \texttt{g} zurück, die mit dem \texttt{Sprite} kollidieren.
+\label{subsection:collision-detection}
Mit der \texttt{foreach}-Variante der \texttt{for}-Schleife können wir alle Kollisionen behandeln.
@@ -108,6 +109,7 @@ Implementiere in der \mintinline{java}{void act()} des Spielers die Kollisionser
\end{itemize}
\subsection{\faIcon{desktop} Kollision behandeln}
+\label{subsection:collision-handling}
\begin{defbox}{Kollision was jetzt?}
\begin{tabular}{p{0.37\textwidth} p{0.6\textwidth}}
@@ -140,16 +142,39 @@ Implementiere im Spieler die Methode \mintinline{java}{void reactToCollisionWith
\item Wiederholung die letzte Bewegung in die Richtung, die \emph{nicht} zur Kollision führt.
\end{itemize}
+\subsection*{\faIcon{desktop} Kollision erkennen \emph{und} behandeln}
+
+Der folgende Pseudocode beschreibt das Zusammenspiel der Erkennung von Kollision und ihrer anschließenden Behandlung.
+
+\begin{pseudocode}
+\texttt{für alle überschneidenden Objekte}
+
+\hspace{5mm}\texttt{behandle Überschneidung}
+\end{pseudocode}
+
+Wir wollen also unsere \textbf{Kollisionserkennung} \mintinline{java}{getCollidingShapes(Group group)} (Siehe: \ref{subsection:collision-detection}) mit unserer \textbf{Kollisionsbehandlung} \mintinline{java}{reactToCollisionWithShape(Shape shape)} (Siehe: \ref{subsection:collision-handling}) verbinden.
+
+\vspace{3mm}
+\begin{center}
+\textbf{Kollisionserkennung} \hspace{5mm} \faIcon{link} \hspace{5mm} \textbf{Kollisionsbehandlung}
+\end{center}
+\vspace{3mm}
+
+\begin{itemize}
+ \item Rufe mit \emph{jedem} kollidierenden Shape in \texttt{collidingShapes} die Methode \mintinline{java}{reactToCollisionWithShape} auf.
+\end{itemize}
+
+
\subsection{\faIcon{desktop} Auf dem Boden stehen}
Bei Kollision \textbf{von oben} wollen wir erkennen, das wir auf festem Boden stehen!
-Das erlaubt uns abzuspringen und gegebenenfalls eine Laufanimation anzuzeigen.
+Das erlaubt Gravitation wirken zu lassen, abzuspringen und gegebenenfalls eine Laufanimation anzuzeigen.
Das Attribut \mintinline{java}{Shape standsOn} der Klasse \texttt{Player} merkt sich auf welchem Shape der Spieler steht.
\begin{itemize}
\item (Ergänze das \texttt{standsOn} Attribut vom Typ \texttt{Shape} in der Klasse \texttt{Player})
-\item (Ändere die Gravitation zu einer Prüfung \mintinline{java}{standsOn == null})
+\item (Ändere die Prüfung, ob Gravitation wirkt zu: \mintinline{java}{standsOn == null})
\item Bei Kollision von \emph{oben}, speichere das kollidierende \texttt{shape} im Attribut \texttt{standsOn}.
\item Überprüfe vor der Kollisionserkennung, ob der Spieler noch mit einem möglicherweise gespeicherten \texttt{standsOn} Objekt kollidiert. (\mintinline{java}{standOn != null && !collidesWith(standsOn)})
\item \emph{Falls nein} setze \texttt{standOn} auf \mintinline{java}{null}