Autor Beitrag
Fabian E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Mi 16.04.08 21:00 
Hallo zusammen,

ich habe folgendes Problem.
bei meinem Towerdefence-kon möchte ich implementieren, dass die schüsse die keinen gegner getroffen haben, in schussrichtung aus dem Spielfeld rausfliegen. Nun weiß ich aber nicht so ganz wie ich das realisieren soll.
Ein erster ansatz war, einfach den Gegner nach hinten in Schussrichtung zu "verlegen". also praktisch als ziel des schusses ein ziel auserhalb des Spielbereiches angeben damit der schuss dorthin fliegt. Das sollte auch eigentlich klappen. nur weiß ich jetzt nicht wie ich den gegner dorthin verlegen soll.
ich habe die Position meines schusses und die des gegners in dessen richtung der schuss zuletzt geflogen ist. (Wenn das "weiterfliegen" passieren soll haben schuss unf gegner natürlich dieselbe position).

Hat jemand eine idee wie das klappen könnte?

gruß
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 16.04.08 21:40 
Hi,

Wenn du die Strecke, die du verlängern willst, als Vektor betrachtest, kannst du sie ganz einfach um Faktor * Vektor verlängern:
ausblenden Delphi-Quelltext
1:
2:
Strecke.X := 1.2 * Strecke.X;
Strecke.Y := 1.2 * Strecke.Y;


Da du nicht die Strecke, sondern die Punkte, aus denen sie besteht, hast, sieht das ganze dann so aus:
ausblenden Delphi-Quelltext
1:
ObjektPos.X - SchussPos.X := 1.2 * (ObjektPos.X - SchussPos.X)					

und umgestellt, dmit du auch zuweisen kannst:
ausblenden Delphi-Quelltext
1:
ObjektPos.X := SchussPos.X + 1.2 * (ObjektPos.X - SchussPos.X)					


Das für beide Koordinaten und du hast es. Zu deinem Ansatz: Ich würde den Gegner unsichtbar an der Position belassen... Wenn du dir das ganze dreidimensional vorstellst, landet ja der Schuss eigentlich an der Stelle auf dem Boden, wo der Gegner stand.

Edit: Wenn du das ganze exakt bis zum Bildschirmrand fliegen lassen willst, musst du wohl erst den Schnittpunkt zwischen der verlängerten Geraden und dem Bildschirmrand berechnen... Besser ist es aber wohl, den Schuss einfach in der Richtung weiterfliegen zu lassen, bis er den Bildschirm verlässt, daruf prüfen. Ich weiss zwar nicht, wie du das implementiert hast, aber, du wirst ja wohl so jedes Mal prüfen, ob der Gegner nun getroffen wurde... So prüfst du dann halt auf Schuss hat Bildschirm verlassen.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Fabian E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Do 17.04.08 17:41 
ja danke, das klappt. Da wär ich gestern abend nich mehr von selber drauf gekommen.... Viel zu lange schule... :(

gruß
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.04.08 10:17 
user profile iconFabian E. hat folgendes geschrieben:
bei meinem Towerdefence-kon möchte ich implementieren, dass die schüsse die keinen gegner getroffen haben, in schussrichtung aus dem Spielfeld rausfliegen.

Ich weiß ja nicht, wie du das implementiert hast, aber wenn ich das implementieren würde, wäre das ein Punkt, der sich von alleine erledigen würde, weil es automatisch passiert. Denn so lange das Geschoss nichts trifft, fliegt es gerade aus weiter. Deswegen verwundert mich die Frage jetzt irgendwie etwas.
Fabian E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 554

Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
BeitragVerfasst: Fr 18.04.08 15:20 
nein es würde an dem punkt einfach stehen bleiben da sein target = nil ist. und genau dann wird die bewegungsroutine nicht aufgerufen.

gruß
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.04.08 15:43 
user profile iconFabian E. hat folgendes geschrieben:
nein es würde an dem punkt einfach stehen bleiben da sein target = nil ist. und genau dann wird die bewegungsroutine nicht aufgerufen.

Wie gesagt, so hätte ich es implementiert, weil das für mich nahe liegenste Vorgehensweise wäre.