Richtung von bewegenden Objekten
-
Was für ein Game ist es denn,bzw wird die Grafikkarte sehr stark gefordert ?
Das klingt für mich wahrscheinlicher als Geschwindigkeitsprobleme wegen Sinus und Kosinus
-
Ich laube nicht, das die Grafikkarte richtig gefordert wird
An sich fliegen da nur ein Paar Bitmaps rum, die man von unten (Bildschrimmäßig gesehen) abschießen muss, dafür fliegen von unten kugeln zur aktuellen Mausposition. Ich hab das so gemacht, dass der Winkel mit dem Tangens berechnet wird, und vondem Winkel aus dann zurückrechnen in die X und Y Geschwindigkeit, mit Cosinus und Sinus. Dazu benutze ich die Funktionen tanf(), cosf() und sinf().
-
Was willst du auf Laptops erwarten? Die sind einfach saulahm was Grafik betrifft. Außer sie haben den NForce Chipset drin.
Das bischen Berechnung mit Sin/Cos kannste auf ner alten Kiste auch noch machen, ohne großartige Performance einbußen
Ach ja - was verwendest du als Grafik API? DX? OpenGL? GDI?
Wenn GDI - probier mal DX oder GL
-
Kannst Du das Problem nochmal genauer beschreiben?
Mir ist nicht ganz klar, wozu Du überhaupt den Winkel benötigst. Ich denke, Du hast den Abschußpunkt und den Zielpunkt.
nehmen wir die in 2D als Tupel mit (x,y) ist Zielpunkt, (a,b) sind Abschußpunkt, dann ist v = (v1,v2) der Verbindungsvektor, wobei v1 = x-a, v2 = y-b.
Wenn Du v jetzt noch normierst kannst Du die Geschwindigkeit exakt dosieren, also:
v0 := v / sqrt((v1)^2 + (v2)^2))
Dann ergibt sich die Schußbahn als Gerade:
g: x = (a,b) + t*v0
Jetzt einfach t regelmäßig erhöhen, zum Beispiel um die vergangene Zeit. Und Du erhältst die Position.
-
Wenn sich das Zielobjekt bewegt, ist es nicht ganz so einfach, den richtigen Abschussvektor zu finden. Aber es gibt dafür irgendwo ein Tutorial,... wegen Sin/Cos: ich habe mal einen Test gesehen, wo das überprüft wurde und es war wirklich schneller, die Werte vom Prozessor berechnen zu lassen als sie in einer Tabelle nachzuschlagen. Hier spart man also an der falschen Stelle...
-
Naja, mal angenommen, das Zielobjekt bewegt sich auf einer Geraden und ich habe diese Gerade, dann kann ich eine Gleichung aufstellen, die mir die Position des Objekts zu einem bestimmten Zeitpunkt gibt. Und mein Schuß läßt sich als Kreis mit Radius max. Entfernung zu bestimmtem Zeitpunkt um die Abschußposition interpretieren. Jetzt muß man die beiden einfach schneiden. Das ist der Trefferpunkt, wo man hinschießen muß.
Allerdings muß man sich überlegen, wie groß t sein muß, damit es überhaupt einen Treffer gibt. Außerdem gibt es zwei Lösungen, also die nähere Auswählen.
Klingt nicht wirklich schwierig.
MfG Jester
-
Original erstellt von TheToast:
ich hab sbisher über die sin/cos Mehtode gemacht, aber das soll sehr langsam sein. Ist das die beste Methode, oder geht das auch besser?Es "soll" also langsam sein? In dem Fall "soll"test du es nicht einfach so glauben, sondern selber nachmessen!
-
Wenn du nicht mehr für nen 386er oder 486er programmierst, dann solltest du Sin/Cos verwenden. Gut - beim K6 I / II isses etwas langsam. Aber bei Prozessoren wie Athlon, P II und höher, ist wohl sin/cos am besten.
@TGCC - jupp - so isses - immer alles selber Testen
-
@Jester: Erklär das mal genauer.
Beim Sin/Cos wert kann ich mir sucher sein, dass es sich immer um die gleiche anzahl von Pixeln bewegt, nämlich den Radius (ist bei Sin/Cos immer 1) mal einen Konstanten wert den ich vorgebe, deine Methode verstehe ich nicht ganz...
-
Hmmm... ich weiß nicht, mir ist überhaupt nicht richtig klar, was Du überhaupt erreichen willst...!?!
Also: Du hast 'ne dicke Wumme untem am Spielfeldrand, die in Richtung eines Gegners, der oben irgendwo rumschwirrt, ballern soll!? Soll er direkt auf den Gegner zielen (wenn dieser sich dann weiterbewegt, geht der Schuss ins Leere), oder soll er quasi genügend "vorhalten"!?! Wenn er vorhalten soll, dann so, daß er aufgrund der AKTUELLEN Bewegung des Gegners den Eintrittspunkt berechnet (ändert dann zwischenzeitlich der Gegner wieder seine Richtung, geht der Schuss ebenfalls ins Leere), oder soll er quasi IMMER ins Ziel treffen, selbst wenn der Gegner wild umherfliegt.
Oder bewegt sich der Gegner tatsächlich mit konstanter Geschwindigkeit auf einer Gerade!?!
-
Nein, die Kugel soll nicht wirklich zu dem Gegner fliegen, sondern in richtung des Mauszeigers, aber nur in die richtung wo der Mauszeiger zum Abschusszeitounkt war, die Richtung soll nicht geändert werden. Das ganze soll auch auf den Laptops funktionieren, weil einige hier einen haben und das Spiel eigentlich nur ein Insider ist.
-
Ach sooooo...
Jaa, das kann doch nicht soooo schwer sein...!
Da hast Du doch einen festen Start- und einen Zielpunkt, beide unveränderlich.
Das ist doch wirklich nur Gerade ausrechnen!?
Ziehst jeweils die x- und die y-Koordinaten der Punkte ab, und teilst die durcheinander, dann hast Du das Verhältnis. Wenn Du eine Einheit nach rechts gehst, wie viele Du dann nach oben gehen mußt.
Bzw. Du arbeitest mit Vektoren, splittest die immer auf.
D.h. die Gesamtgeschwindigkeit liegt fest, davon werden aber immer je nach obigem Verhältnis soundsoviel auf die x-Achse projeziert, und soundsoviel auf die y-Achse.