Hi,
ich arbeite im Moment an einem 2D Spiel und das ganze realisiere ich mit Swing/AWT. Jedoch stecke ich gerade in einer Sackgasse und weiß einfach nicht weiter.
Dabei handelt sich mein erstes Problem mit dem Befehl drawLine(x,x,x,x). Ich möchte eine Linie mit Kollisionsabfrage zeichnen. Soll heissen, dass Start-Koordinaten und End-Koordinaten bekannt sind aber wenn sich zwischen diesen 2 Punkten etwas befindet, soll er nur bis zu diesem Hindernis die Linie malen. Um das ganze vielleicht etwas besser zu verstehen ein Bild:
Die schwarze Linie soll dabei die tatsächlich gezeichnete Linie sein und die rote soll nicht gezeichnet werden. Im Spiel könnt ihr euch das so vorstellen, dass die Start-Koordinaten der Spieler ist, welcher in einer Art Jump&Run durch den Level hüpfen kann, und die End-Koordinaten sind der Mauszeiger. Die Linie soll eine Zielhilfe für den Spieler sein, der die Aufschläge der Geschosse vorhersieht. Der Levelaufbau ist in einem Raster gespeichert, welches in ein Array geladen wird. Bei meinem Lösungsversuchen, versuche ich das ganze als Hilfe zu nehmen aber so ganz auf das gewünsche Ergebnis bin ich noch nicht gekommen. Dazu vielleicht eine Zeichnung von mir:
Das ist ein Beispiel Level mit natürlich übergroßen Feldern. Das dunkle Markiert ein Feld, wo das Zeichnen aufhören soll. Die Felder sind 50 Pixel groß. Ich habe zunächst versucht mehrere drawLine's auszuführen, unzwar immer bis zu einer Grenze. Danach wird überprüft ob sich in dem Nachbar X-Feld ein "undurchscheinbares" Feld befindet. Wenn Ja wird aufgehört drawLine's zu zeichnen. Bei einer Y-Grenze ist es parallel dazu dasselbe. Das ganze in zwei verschachtelten for-Schleifen wäre perfekt gewesen, da ich mit der Formel startX/50 - endX/50 bzw. startY/50 - endY/50 ohne Probleme herausfinden kann wieviele Felder sich bis zu den Endkoordinaten befinden und in welche Richtung diese gehen. Das Problem: Die Steigung! Sagen wir startX%50 ist 48 und startY%50 ist 1, da würde man auf den Gedanken kommen, dass die X-Grenze als erstes erreicht wird, aber wenn die Gerade 90° nach oben geht, dann ist es eben nicht so.
Ich weiß echt nicht mehr weiter. Ich habe soviele Berechnungen gemacht um auf eine Lösung zu kommen aber nichts bringt mich weiter. Vielleicht denke ich auch zu kompliziert und es gibt irgendeine Funktion in Java die mich da ohne Probleme weiterbringt, desshalb bitte ich euch um Rat.
Problem 2:
Dieses Problem hängt glaub ich eng mit dem 1. zusammen. Wenn die Figur jetzt mit der linken Maustaste einen Feuerball abfeuern soll (Image), dann soll dieser in die Richtung fliegen, wohin gezeigt wird, desshalb die Zielhilfe von oben. Mir ist klar, dass ich dabei einfach die x und y Koordinaten erhöhen/verringern muss aber um wieviel damit er genau dahinfliegt, wohin gezeigt wird? Der Feuerball bekommt von mir eine Geschwindigkeit spendiert, wird an den Koordinaten vom Spieler erzeugt und soll jetzt Richtung Endwerte und noch weiter bis zu einer Kollision fliegen. Die Kollision ist nicht das Problem nur halt die Flugrichtung, da ich keine Ahnung habe wie seine Koordinaten verändert werden soll.
Danke schonmal im voraus : ]
g
ich arbeite im Moment an einem 2D Spiel und das ganze realisiere ich mit Swing/AWT. Jedoch stecke ich gerade in einer Sackgasse und weiß einfach nicht weiter.
Dabei handelt sich mein erstes Problem mit dem Befehl drawLine(x,x,x,x). Ich möchte eine Linie mit Kollisionsabfrage zeichnen. Soll heissen, dass Start-Koordinaten und End-Koordinaten bekannt sind aber wenn sich zwischen diesen 2 Punkten etwas befindet, soll er nur bis zu diesem Hindernis die Linie malen. Um das ganze vielleicht etwas besser zu verstehen ein Bild:
Die schwarze Linie soll dabei die tatsächlich gezeichnete Linie sein und die rote soll nicht gezeichnet werden. Im Spiel könnt ihr euch das so vorstellen, dass die Start-Koordinaten der Spieler ist, welcher in einer Art Jump&Run durch den Level hüpfen kann, und die End-Koordinaten sind der Mauszeiger. Die Linie soll eine Zielhilfe für den Spieler sein, der die Aufschläge der Geschosse vorhersieht. Der Levelaufbau ist in einem Raster gespeichert, welches in ein Array geladen wird. Bei meinem Lösungsversuchen, versuche ich das ganze als Hilfe zu nehmen aber so ganz auf das gewünsche Ergebnis bin ich noch nicht gekommen. Dazu vielleicht eine Zeichnung von mir:
Das ist ein Beispiel Level mit natürlich übergroßen Feldern. Das dunkle Markiert ein Feld, wo das Zeichnen aufhören soll. Die Felder sind 50 Pixel groß. Ich habe zunächst versucht mehrere drawLine's auszuführen, unzwar immer bis zu einer Grenze. Danach wird überprüft ob sich in dem Nachbar X-Feld ein "undurchscheinbares" Feld befindet. Wenn Ja wird aufgehört drawLine's zu zeichnen. Bei einer Y-Grenze ist es parallel dazu dasselbe. Das ganze in zwei verschachtelten for-Schleifen wäre perfekt gewesen, da ich mit der Formel startX/50 - endX/50 bzw. startY/50 - endY/50 ohne Probleme herausfinden kann wieviele Felder sich bis zu den Endkoordinaten befinden und in welche Richtung diese gehen. Das Problem: Die Steigung! Sagen wir startX%50 ist 48 und startY%50 ist 1, da würde man auf den Gedanken kommen, dass die X-Grenze als erstes erreicht wird, aber wenn die Gerade 90° nach oben geht, dann ist es eben nicht so.
Ich weiß echt nicht mehr weiter. Ich habe soviele Berechnungen gemacht um auf eine Lösung zu kommen aber nichts bringt mich weiter. Vielleicht denke ich auch zu kompliziert und es gibt irgendeine Funktion in Java die mich da ohne Probleme weiterbringt, desshalb bitte ich euch um Rat.
Problem 2:
Dieses Problem hängt glaub ich eng mit dem 1. zusammen. Wenn die Figur jetzt mit der linken Maustaste einen Feuerball abfeuern soll (Image), dann soll dieser in die Richtung fliegen, wohin gezeigt wird, desshalb die Zielhilfe von oben. Mir ist klar, dass ich dabei einfach die x und y Koordinaten erhöhen/verringern muss aber um wieviel damit er genau dahinfliegt, wohin gezeigt wird? Der Feuerball bekommt von mir eine Geschwindigkeit spendiert, wird an den Koordinaten vom Spieler erzeugt und soll jetzt Richtung Endwerte und noch weiter bis zu einer Kollision fliegen. Die Kollision ist nicht das Problem nur halt die Flugrichtung, da ich keine Ahnung habe wie seine Koordinaten verändert werden soll.
Danke schonmal im voraus : ]
g