Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

1

10.10.2010, 11:30

SDL - Grafik "facing Point" machen?

Hi ich bins wieder mit meinem TD.
Ich habe eine Frage, und zwar:
bei vielen TD's drehen sich die Türme
exakt in die Richtung des Gegners,
den sie anvisiert haben. wie macht man
das? gibt es sowas wie winkelberechnung
und Grafiken drehen in der SDL?

MfG RmbRT
"Dumm ist, wer dummes tut."

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

10.10.2010, 11:41

sdl liefert keine funktion zum drehen von sprites mit. eine gute suchmaschine liefert dir aber sicher etwas passendes.(nutzt du gleich die sfml bräuchest du solche zusatzlibs nur für eine komplexe benutzeroberfläche oder ein partikelsystem, sonst ist eigentlich alles dabei^^)
die berechnung des winkeln ist nicht so schwer.
für einen richtungsvektor berechnest du den bewegungsvektor zwischen turm und spieler und teilst ihn durch seine eigene länge.
für den winkel im bogenmaß oder grad kannst du den tangens nutzen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

3

10.10.2010, 11:42

Zum einen würde ich dich bitten nicht nach 5-6 Wörtern immer einen Zeilenumbruch zu machen.

Zum anderen könntest du dir die Fragen auch teilweise selbst beantworten ^^ "sdl rotate" in google und schon hast du deine antworten:
rotozoomSurface(SDL_Surface* surface, double zoom, double angle, int smooth) aus der SDL_gfx library.
Ich kenne mich mit Tower Defense nicht wirklich aus, weshalb ich nicht sagen kann, ob die Tower sich mitdrehen, aber die Projektile sollten schon in richtung des gegners fliegen, also musst du dich sowieso damit beschäftigen.

Da ich mich noch nicht wirklich viel mit der SDL beschäftigt habe, kann ich es dir nicht genau sagen, aber ich denke mal, dass die SDL keine hilfsfunktionen für winkelberechnungen hat. Ich denke das muss man schon noch selbst machen.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

10.10.2010, 12:33

atan ist das Stichwort ;) Du holst dir die Koordinaten des Turms (tx, ty) und die Koordinaten des Monsters/Gegners whatever (mx, my) und dann

C-/C++-Quelltext

1
2
3
4
5
6
#define atan_d(x) (atan(x) * 180 / M_PI) // atan Funktion in Bogenmaß/Degrees
//...
int dx = tx - mx;
int dy = ty - my;

float angle = atan_d(dy / dx);
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

10.10.2010, 13:54

man sollte lieber atan2 nutzen, da es für jedes x-y-wertepaar auch eine lösung gibt:

C-/C++-Quelltext

1
2
3
4
5
6
#define atan_d(y,x) (atan2(y,x) * 180.0f / M_PI)

int dx = tx - mx;
int dy = ty - my;

float angle = atan_d(dy,dx);

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

10.10.2010, 14:26

Oder statt eines Makro lieber 'ne Funktion:

C-/C++-Quelltext

1
2
3
float atan_d(int dx, int dy) {
    return atan2(dy, dx) * 180.0f / M_PI;
}
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

RmbRT

Treue Seele

  • »RmbRT« ist der Autor dieses Themas

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

7

10.10.2010, 14:59

Danke für die ganze hilfe, aber wie installiert man die SDL_gfx richtig? Es klappt irgendwie nicht :(
EDIT: Klappt doch, aber sobald die gegner in der reichweite des Turmes sind, dreht dieser sich und rast außerhalb des bildschirms... :(
PS. Die Daten des Turmes stimmen die ganze zeit, auch wenn er wegfliegt...
weis jmd weiter?
MfG RmbRT
"Dumm ist, wer dummes tut."

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »RmbRT« (10.10.2010, 16:20)


8

10.10.2010, 16:35

Quellcode bitte...

Sonst lässt sich da nichts zu sagen. ... Obwohl... in anbetracht des aktuellen Datums würde ich mal sagen die Lösung zu deinem Problem ist 42. ;)

Gruß
SaRu_

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SaRu« (10.10.2010, 16:45)


9

10.10.2010, 16:40

Ich bezweifel mal das die Daten stimmen wenn er nicht das macht was er soll.

Aber habe gerade auch meine Kristallkugel nicht bei mir also kann ich dir auch nichts dazu sagen.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

10

10.10.2010, 18:00

Ich verstehe es nicht so wirklich, wenn du rotozoomSurface(SDL_Surface* surface, double zoom, double angle, int smooth) richtig benutzt, dürfte der Turm sich eigentlich überhaupt nicht bewegen. Es sei denn der Mittelpunkt, um den gedreht wird, ist nicht im Mittelpunkt.
Aber wie gesagt kenne ich die SDL nicht wirklich, in der SFML muss man den Mittelpunkt allerdings selbst setzen.

Trotzdem wären natürlich irgendwelche Hinweise, was du machst (und vor allem wie ^^ => code) hilfreich :D Auch wenn hier im Forum sicherlich einige erfahrene, kluge Köpfe anwesend sind, so sind trotzdem leider keine Hellseher dabei :(

Werbeanzeige