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

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

1

03.04.2013, 12:01

If Abfragenprobleme in C++

Hi ich habe eine Problem mit einer If-Abfrage in meinem Aktuelemem Projekt.
Es gibt mehrere verschachtelte Abfragen die eine Kolisionabfragen. Beim durch Steppen waren die Werte alle so das es eigentlich in so das er in die nähste Abfrage springen sollte, was er nicht tat.
Warscheinlich war es ein gan simpler Fehler ich finde ihn aber leider nicht.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Fred::FredKolision (Level Level)
{ 
    if (FredAnsichtY = FREDDOWN)
    {
        if (FredAnsichtX = FREDRIGHT)
        {
            if (Level.LEVEL = LEVEL_1)
            {
                if (
                    //Objekt 1
                    (Level.Level_1_Objekt_1_X < FredX + 129 < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B && FredY + 140 > Level.Level_1_Objekt_1_Y) ||
                    (Level.Level_1_Objekt_1_X < FredX + 100 < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B && FredY + 200 > Level.Level_1_Objekt_1_Y)
                    )
                        {
                            FredXYTest ();
                        }       
            }
        }
    }
}

Sie wird durch Main aufgerufen und bekommt ein Objekt mit übergeben.
Danke schon einmal für eure Antworten

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

03.04.2013, 12:10

if ( x = y )
muss
if ( x == y )
heißen.
Sorry, aber grundlegende Syntax muss man schon beherrschen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

03.04.2013, 12:10

Überprüf die Bedingungen. Sind das wirklich Vergleiche in Zeile 3, 5 und 7?

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

4

03.04.2013, 15:30



Überprüf die Bedingungen. Sind das wirklich Vergleiche in Zeile 3, 5 und 7?

Ja das sind Abfragen, ich wollte nur mit einer ersten einfachen Abfrage testen ob es läuft

Sorry, aber grundlegende Syntax muss man schon beherrschen.
Das ist mir leider schon einmal passiert, ich probiere es mir zu merken :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

03.04.2013, 15:40

Achte einfach auf die Warnungen deines Compilers... ;)

In Visual C++ dafür den Warning Level auf mindestens 4 stellen (Projekteigenschaften > C/C++ > General).

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

6

03.04.2013, 17:00

Danke,
Mach ich

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

7

03.04.2013, 20:19

Ich brauche noch einmal eure Hilfe:

Er Möchte einfach nicht in die Abfrage "Sclüssel" und "Tür" springen, setzt nicht mahl Haltepunkte "Ist nicht mit einem Ausführbarem Code verbunden" Was heist das und wie kann ich das lösen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
void Fred::FredKolision (Level Level, Spielsteuerung Steuerung)
{ 
    if (FredAnsichtY == FREDUP)
    {
        if (FredAnsichtX == FREDRIGHT)
        {
            if (Level.LEVEL == LEVEL_1)
            {
                if (
                    //Objekt 1
                    // Ohren
                    ((FredX + 92  > Level.Level_1_Objekt_1_X && FredX + 92  < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY    > Level.Level_1_Objekt_1_Y && FredY     < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H)) ||
                    // Ohr Seite
                    ((FredX + 54  > Level.Level_1_Objekt_1_X && FredX + 54  < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY + 33  > Level.Level_1_Objekt_1_Y && FredY + 33  < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H)) ||
                    //Hände
                    ((FredX + 122 > Level.Level_1_Objekt_1_X && FredX + 122 < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY + 126 > Level.Level_1_Objekt_1_Y && FredY + 126 < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H)) ||
                    // Füße
                    ((FredX + 106 > Level.Level_1_Objekt_1_X && FredX + 106 < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY + 200 > Level.Level_1_Objekt_1_Y && FredY + 200 < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H)) ||
                    // Flamme
                    ((FredX     > Level.Level_1_Objekt_1_X && FredX     < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY + 200 > Level.Level_1_Objekt_1_Y && FredY + 200 < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H)) ||
                    // Rakete
                    ((FredX + 30  > Level.Level_1_Objekt_1_X && FredX + 30  < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY + 91  > Level.Level_1_Objekt_1_Y && FredY + 91  < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H)) ||
                    // Rakete Mitte
                    ((FredX + 24  > Level.Level_1_Objekt_1_X && FredX + 24  < Level.Level_1_Objekt_1_X + Level.Level_1_Objekt_1_B) && (FredY + 128 > Level.Level_1_Objekt_1_Y && FredY + 128 < Level.Level_1_Objekt_1_Y + Level.Level_1_Objekt_1_H))
                    )
                    {
                        FredXY (Level);
                    }
                // Schlüssel 
                if (
                    //Objekt 1
                    // Ohren
                    ((FredX + 92  > Level.SchluesselX && FredX + 92  < Level.SchluesselX + Level.SchluesselB) && (FredY     > Level.SchluesselY && FredY    < Level.SchluesselY + Level.SchluesselH)) ||
                    // Ohr Seite
                    ((FredX + 54  > Level.SchluesselX && FredX + 54  < Level.SchluesselX + Level.SchluesselB) && (FredY + 33  > Level.SchluesselY && FredY + 33  < Level.SchluesselY + Level.SchluesselH)) ||
                    //Hände
                    ((FredX + 122 > Level.SchluesselX && FredX + 122 < Level.SchluesselX + Level.SchluesselB) && (FredY + 126 > Level.SchluesselY && FredY + 126 < Level.SchluesselY + Level.SchluesselH)) ||
                    // Füße
                    ((FredX + 106 > Level.SchluesselX && FredX + 106 < Level.SchluesselX + Level.SchluesselB) && (FredY + 200 > Level.SchluesselY && FredY + 200 < Level.SchluesselY + Level.SchluesselH)) ||
                    // Flamme
                    ((FredX     > Level.SchluesselX && FredX    < Level.SchluesselX + Level.SchluesselB) && (FredY + 200 > Level.SchluesselY && FredY + 200 < Level.SchluesselY + Level.SchluesselH)) ||
                    // Rakete
                    ((FredX + 30  > Level.SchluesselX && FredX + 30  < Level.SchluesselX + Level.SchluesselB) && (FredY + 91  > Level.SchluesselY && FredY + 91  < Level.SchluesselY + Level.SchluesselH)) ||
                    // Rakete Mitte
                    ((FredX + 24  > Level.SchluesselX && FredX + 24  < Level.SchluesselX + Level.SchluesselB) && (FredY + 128 > Level.SchluesselY && FredY + 128 < Level.SchluesselY + Level.SchluesselH)) &&
                    (Level.Schluessel_1 == SICHTBAR)
                    )
                    {
                        Level.Schluessel_Anzahl = Level.Schluessel_Anzahl + 1;
                        Level.Schluessel_1 = UNSICHTBAR;
                    }
                // Tür
                if (
                    //Objekt 1
                    // Ohren
                    ((FredX + 92  > Level.TuerX && FredX + 92  < Level.TuerX + Level.TuerB) && (FredY       > Level.TuerY && FredY      < Level.TuerY + Level.TuerH)) ||
                    // Ohr Seite
                    ((FredX + 54  > Level.TuerX && FredX + 54  < Level.TuerX + Level.TuerB) && (FredY + 33  > Level.TuerY && FredY + 33  < Level.TuerY + Level.TuerH)) ||
                    //Hände
                    ((FredX + 122 > Level.TuerX && FredX + 122 < Level.TuerX + Level.TuerB) && (FredY + 126 > Level.TuerY && FredY + 126 < Level.TuerY + Level.TuerH)) ||
                    // Füße
                    ((FredX + 106 > Level.TuerX && FredX + 106 < Level.TuerX + Level.TuerB) && (FredY + 200 > Level.TuerY && FredY + 200 < Level.TuerY + Level.TuerH)) ||
                    // Flamme
                    ((FredX     > Level.TuerX && FredX      < Level.TuerX + Level.TuerB) && (FredY + 200 > Level.TuerY && FredY + 200 < Level.TuerY + Level.TuerH)) ||
                    // Rakete
                    ((FredX + 30  > Level.TuerX && FredX + 30  < Level.TuerX + Level.TuerB) && (FredY + 91  > Level.TuerY && FredY + 91  < Level.TuerY + Level.TuerH)) ||
                    // Rakete Mitte
                    ((FredX + 24  > Level.TuerX && FredX + 24  < Level.TuerX + Level.TuerB) && (FredY + 128 > Level.TuerY && FredY + 128 < Level.TuerY + Level.TuerH)) &&
                    (Level.Schluessel_1 == UNSICHTBAR && Level.Schluessel_Anzahl >= 1)
                    )
                    {
                        Level.Schluessel_Anzahl = Level.Schluessel_Anzahl - 1;
                        Level.Schluessel_1 = UNSICHTBAR;
                        Steuerung.Spielstatus = LEVEL_2;
                        Steuerung.Löschen = LOESCHEN;
                    }
            }
        }
    }
}

8

03.04.2013, 20:27

Mir gefällt deine Naming-Convention: Eine Klasse Namens Fred, in der alle Variablen-/Methodennamen mit Fred beginnen. Das Spiel wird bestimmt lustig :thumbsup:

PS: Warum beginnt die Methode `LadeFred()` nicht mit Fred, sollte das nicht eigentlich `FredLadeFred()` heissen?

btw. Fred::FredKolision <- Finde den Fehler

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »appfyr« (03.04.2013, 20:40)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

03.04.2013, 20:28

Neu kompilieren.

Wieso greift Dein Fred eigentlich auf Level und Türen zu? Das ist komplett gegen die Idee von OOP Kapselung.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

10

03.04.2013, 21:08

Danke schon einmal für eure Antworten
Wieso greift Dein Fred eigentlich auf Level und Türen zu? Das ist komplett gegen die Idee von OOP Kapselung.
Ich bin noch zimlicher Anfänger was meinst du mit OPP Kapselung, ich habe zwei Klassen die eine für die Hauptfigur und die andere für den Aufbau der Level und aller anderen wichtigen Funktionen.
Neu kompilieren bringt nichts er möchte einfach nicht darauf zugreifen :(

Werbeanzeige