Hi,
Wenn du die Strecke, die du verlängern willst, als Vektor betrachtest, kannst du sie ganz einfach um Faktor * Vektor verlängern:
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:
Delphi-Quelltext
1:
| ObjektPos.X - SchussPos.X := 1.2 * (ObjektPos.X - SchussPos.X) |
und umgestellt, dmit du auch zuweisen kannst:
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,