[C++] While Schleife mit SDL funktioniert nicht

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Hi,

ich will gerade ein Spiel mit der SDL erstellen.
Jetzt bin ich gerade dabei die Figur zu steuern (links, rechts, hoch, runter).
Wenn ich jetzt eine Richtung angebe soll die Figur solange in diese Richtung laufen bis ich eine andere Richtung angebe.
Dazu brauch ich eine While Schleife.

Wenn ich in meiner Funktion jetzt aber eine While Schleife einbaue, stürzt das Programm ab. If Abfragen funktionieren.

Wie mach ich das jetzt?

MFG

- Patrick -
 
Zuletzt bearbeitet:

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Code:
bool bActive = g_pFramework->KeyDown (SDLK_LEFT);

    while(bActive == true)
    {
        // Spieler nach links bewegen
        m_fXPos -= 30.0f * g_pTimer->GetElapsed ();

                if (m_fXPos > 15)
            {
                bActive = false;
            }
        bActive = true;
    }
 

tleilax

be forever curious
ID: 27936
L
20 April 2006
1.845
183
Bist Du sicher, dass Du bActive am Ende der Schleife wieder auf true setzen willst? Dann kannste die ja nie verlassen...
 

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
tleilax schrieb:
Bist Du sicher, dass Du bActive am Ende der Schleife wieder auf true setzen willst? Dann kannste die ja nie verlassen...

Wenn die Schleife endlich klappt, dann kommt in die Schleife noch eine if Abfrage rein ob eine andere Richtung gedrückt wurde. Wenn ja, dann setze ich den Wert auf false.
 

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Code:
bool bActive = g_pFramework->KeyDown (SDLK_LEFT);

    while(bActive)
    {
        // Spieler nach links bewegen
        m_fXPos -= 30.0f * g_pTimer->GetElapsed ();

        // Animieren
        //m_fAnimPhase += 20.0f *g_pTimer->GetElapsed ();

        if (m_fXPos < 15)
        {
            bActive = false;
        }
        else
        {
            bActive = true;
        }
    }
Mh...wenn ich es so mache, dann geht die While Schleife. Aber nach dem Code da oben, springt die figur gleich auf position 15 und wandert nicht so.
 

burnred

Powerhamster
ID: 34739
L
4 Mai 2006
684
40
die klappt nicht weil du deine Abbruchbedingung nie erfüllst...

um ne Änderung beim Tastendruck mitzubekommen müsste zumal die erste Zeile noch innerhalb der schleife stehn.
Code:
do{
//...
}
while(g_pFramework->KeyDown (SDLK_LEFT))
 

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
burnred schrieb:
die klappt nicht weil du deine Abbruchbedingung nie erfüllst...

um ne Änderung beim Tastendruck mitzubekommen müsste zumal die erste Zeile noch innerhalb der schleife stehn.
Code:
do{
//...
}
while(bActive = g_pFramework->KeyDown (SDLK_LEFT))

Wenn ich es aber so mache, dann wandert die Figur nicht wenn ich nicht eine Richtungstaste drücke. Ich will es ja so, dass die Figur loswandert wenn eine Taste gedrückt wird und erst dann aufhört zu wandern wenn die If Bedingung erfüllt ist. Die kann ja auch erfüllt werden.
 

burnred

Powerhamster
ID: 34739
L
4 Mai 2006
684
40
Deine Schleife wird schon funktionieren... nur siehst du bei der Geschwindigkeit mit der sie durchläuft nix... oder die Anzeige wird erst ganz zum Schluss neu gezeichnet....
 

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
burnred schrieb:
Deine Schleife wird schon funktionieren... nur siehst du bei der Geschwindigkeit mit der sie durchläuft nix... oder die Anzeige wird erst ganz zum Schluss neu gezeichnet....

ich hab schon versucht das ganze dann nocht durch z.B. 1000 zu teilen. Dann drück ich die Taste, es dauert ungefähr ne Sekunde und dann erscheint die Figur auf Position 15