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

21

11.08.2009, 18:13

Ich glaubs langsam nicht mehr... aber erstmal danke für die Antworten

Zitat von »"dot"«

Was für einen Compiler verwendest du denn? Evtl. kann der kein const...

Habe const schon ein paar mal in dem Spiel verwendet. Daran lag es leider nicht.

Hab den Code noch mal nach dem Post von GR-PA umgebastelt. Jetzt sieht er so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct Vector2D
{
double x;
double y;
};

struct Vector2D CenterA = { x_Taube, y_Taube.};
struct Vector2D CenterB = { x_Projektil, y_Projektil.};

float RadiusA = 10.0;
float RadiusB = 3.0;

BOOL APIENTRY CircleHitsCircle(Vector2D CenterA, // Mittelpunkt Kreis A

                               float RadiusA,     // Radius Kreis A

                               Vector2D CenterB, // Mittelpunkt Kreis B

                               float RadiusB)     // Radius von Kreis B

{
    return ((CenterA->x-CenterB->x)* (CenterA->x-CenterB->x)+(CenterA->y-CenterB->y)*(CenterA->y-CenterB->y)) <= ((RadiusA+RadiusB)*(RadiusA+RadiusB));
}


Das Ergebnis sieht dann so aus:

(Link)


Hab ihr nochmal ein Tipp oder besser die Lösung :D

Grüße
Dani

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

22

11.08.2009, 18:42

Zitat

C-/C++-Quelltext

1
2
3
4
5
struct Vector2D CenterA = { x_Taube, y_Taube.};
struct Vector2D CenterB = { x_Projektil, y_Projektil.};

float RadiusA = 10.0;
float RadiusB = 3.0; 

WTF?
Was soll das? Dieser Codeabschnitt ist zu 100% falsch und zu 100% überflüssig.
lösch diesen Codeabschnitt raus, dann sollte es klappen, wenn nicht, dann zeig mal den Code, der die Funktion aufruft.
achja:
Ich dachte du benutzt WinAPI? Warum versuchst du dann mit printf Text auszugeben?

btw: screenshots, die noch dazu zu klein sind, um den text darin richtig lesen zu können sind wenig hilfreich. Kopier doch nächstes mal die Fehlermeldungen, oder tipp die wichtigsten ab, wenn das nicht geht.

EDIT: achja fast vergessen: wenn du keine Zeiger benutzt, dann musst du in der Funktion jedes "->" durch einen "." ersetzen.
Signaturen werden überbewertet

23

11.08.2009, 18:58

Zitat von »"GR-PA"«

...In C gibt's keine Referenzen...


Nein?
fka tm

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

24

11.08.2009, 19:02

Zitat von »"TrikkieMikkie"«

Zitat von »"GR-PA"«

...In C gibt's keine Referenzen...


Nein?


Nein.

25

11.08.2009, 21:24

Ich habe es jetzt anderst gelöst. Ich habe die Kollision jetzt in dem Unterprogramm der Bewegung errechnet und es passt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Definition der Kollisionskontrolle


    double delta_x = x_Taube - x_Projektil;
    double delta_y = y_Taube - y_Projektil;
    double hypertenuse;

    hypertenuse = delta_x * delta_x + delta_y * delta_y;

    double abstand = hypertenuse * hypertenuse;
    printf("\nAbstand ist %f", abstand);

    if ( abstand < 300 ) //eigentlich 13^2=169

        {
            KillTimer(hwnd,TIMER_1);
            t = 0;
            v0 = 0;
            hilfswinkel = 0;
            pro_v0 = 0;
            pro_hilfswinkel = 0;
            MessageBox (hwnd,"Treffer","Meldung",MB_OK | MB_ICONEXCLAMATION);
        }


Trotzdem danke für die Hilfe.

Grüße

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

26

12.08.2009, 14:44

[*klugscheiß*]Es heißt Hypotenuse nicht Hypertenuse... ;)[/*klugscheiß*]
Signaturen werden überbewertet

27

13.08.2009, 12:04

Zitat von »"GR-PA"«

[*klugscheiß*]Es heißt Hypotenuse nicht Hypertenuse... ;)[/*klugscheiß*]


War nach vielen Stunden am PC... Und nach müde kommt blöd :) . Aber recht hast du!

Grüße
Dani

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

28

13.08.2009, 12:24

wenn wir schon dabei sind: warum ist abstand eigentlich hypotenuse^4 !?

29

13.08.2009, 12:56


(Link)



C-/C++-Quelltext

1
hypertenuse = delta_x * delta_x + delta_y * delta_y; 


Hier habe ich die Länge (Hypotenuse) haber nur einfach, darum:

C-/C++-Quelltext

1
 double abstand = hypertenuse * hypertenuse; 


Grüße

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

30

13.08.2009, 13:22

Wie du selbst ja schon geschrieben hast:

Quellcode

1
a² + b² = c²


demnach sollte

Quellcode

1
delta_x * delta_x + delta_y * delta_y


aber hypotenuse² sein und dein abstand:

C-/C++-Quelltext

1
double abstand = hypertenuse * hypertenuse;


damit also der 4ten Potenz der Hypotenuse entsprechen.

Deswegen sollte abstand imo wohl eher so aussehen:

C-/C++-Quelltext

1
double abstand = sqrt(hypertenuse);


Da du eh nur schauen willst ob der abstand kleiner als ein bestimmter Wert ist kannst du dir die Wurzel natürlich sparen und gleich die Quadrate vergleichen, allerdings vergleichst du da ja effektiv nicht die Quadrate, sondern die 4te Potenz des Abstandes. Ich dacht halt dass das vielleicht die Erklärung für diesen Kommentar sein könnte:

C-/C++-Quelltext

1
    if ( abstand < 300 ) //eigentlich 13^2=169 


Ich denke das ganze sollte dann also eigentlich so aussehen:

C-/C++-Quelltext

1
2
3
4
5
  hypotenuse = delta_x * delta_x + delta_y * delta_y; 

  if (hypotenuse < 169 /* (10+3)² */)
  {
    ...

Werbeanzeige