Rechnen mit C++ und OpenGl

nchristoph

Erfahrenes Mitglied
Hallo zusammen.

Ich brüte gerade über einem kleinen Problem:

Ich hab mir einen OpenGl Effekt gemacht, der den Bildschirm verzehrt bei aktivierung.

Soweit so gut. Allerdings will ich, das die Stärke während der Anzeigedauer dynamisch zwischen 1 und 10 hin und her geht.

Ich habs jetzt mal so versucht:

Code:
if(m_iStrength == 1 )
m_iStrength++;
else if(m_iStrength == 10)
m_iStrength--;

Wird nur bis 2 gerechnet dann hört er auf.

Dann hab ichs mit folgendem Code versucht:

Code:
if(m_iStrength <= 10 )
m_iStrength++;
else if(m_iStrength >= 1)
m_iStrength--;

Dasselbe Ergebnis.

Jetzt hab ichs noch mit While versucht:

Code:
while(m_iStrength <= 1 )
m_iStrength++;

while(m_iStrength >= 10)
m_iStrength--;

Ich hab da irgendwo einen gewaltigen Denkfehler drinnen vermute ich mal nur wo?
 
C++:
if(m_iStrength == 1 )
m_iStrength++;
else if(m_iStrength == 10)
m_iStrength--;
m_iStrength ist 1, einmal durchlaufen, ist 2 und damit ungleich 1 und 10.

C++:
if(m_iStrength <= 10 )
m_iStrength++;
else if(m_iStrength >= 1)
m_iStrength--;
Da geht er einmal bis 10 durch, dann wird eins abgezogen und wieder eins erhöht und das die ganze zeit.

C++:
bool right(true);
if (right) 
{
    if (m_strength < 10) ++m_strength;
    else right = false;
} 
if (!right) 
{
    if (m_strength) --m_strength; 
    else right = true;
}
so ist es denk ich relativ einfach ;)
 
Zuletzt bearbeitet:
C++:
bool right(true);
if (right) 
{
    if (m_strength <= 10) ++m_strength;
    else right = false;
} 
if (!right) 
{
    if (m_strength) --m_strength; 
    else right = true;
}
so ist es denk ich relativ einfach ;)
Damit erhält man allerdings Zahlen zwischen 0 und 11 einschließlich, und die 0 taucht immer doppelt auf. Wenn das unerwünscht ist, könnte man es auch so lösen:
C++:
if (right) ++m_strength;
else --m_strength;
if (m_strength == 1) right = true;
else if (m_strength == 10) right = false;
Oder gleich so:
C++:
int i = 0;
m_strength = abs(++i % 18 - 9) + 1;
:-)

Grüße, Matthias
 
Ok ich hab mich zu früh gefreut.

Das Raufzählen Funktioniert zwar, aber er zählt nur rauf, nie runter.

Code:
		if (right) 
		{
			++m_iStrength;
			if (m_iStrength == 10)
				right = false;
		}
		else if(!right)
		{
			--m_iStrength;
			if (m_iStrength == 0) 
				right = true;	
		}
 
Hallo,

wie und wo werden denn die Variablen initialisiert? Du darfst natürlich right nicht unmittelbar vor diesem Codeschnipsel auf true setzen.

Grüße, Matthias
 
Code:
bool ZahlStatus=false;
int Variable=1;

if(!ZahlStatus)
{
    if(Variable<10)
    {
        Variable++;
    }
    else
    {
        ZahlStatus=true;
    }
}
else
{
    if(Variable>1)
    {
        Variable--;
    }
    else
    {
        ZahlStatus=false;
    }
}

Das müsste funktionieren.

Achtung, nur schnell eingetippt, kann Tippfehler enthalten.
 
Hallo,

wie und wo werden denn die Variablen initialisiert? Du darfst natürlich right nicht unmittelbar vor diesem Codeschnipsel auf true setzen.

Grüße, Matthias

Beide werden in der CHud::Init() initialisiert. right=false; und m_iStrength = 0;

Und im Destruktor CHud::~CHud werden beide wieder auf false bzw 0 gesetzt wenn sie vorher true bzw > 0 sind.

Die Berechnung mache ich in der CHud::Think() die am Anfang jedes Frames aufgerufen wird.

Das ganze übergebe ich dann mittels

C++:
int iofset = -gHUD.m_iStrength;

an den Effekt.
 
Zurück