Hi,
also es geht um eine ganz normale if-else-Schleife,
allerdings muss es einen Fehler geben, weil das ganze nicht
so funktioniert wie ich will.
Der Code:
int yBallMoveFunc(int iActY)
{
bool bMoveDown = TRUE;
if(iActY >= rect.bottom)
{
iActY = rect.bottom-1;
bMoveDown = FALSE;
}
else
{
if(bMoveDown = FALSE)
{iActY--;}
else
{iActY++;}
}
return iActY;
}
Das Problem:
Mit der Funktion wird die Y-Koordinate eines Kreises bestimmt,
die von einem Timer immer wieder erneuert wird.
Alles funktioniert wie geplant, bis bMoveDown gebraucht wird.
Ich denke es liegt an einer falschen Verschachtelung oder
an bMoveDown.
Der Ball sollte eigentlich beim berühren des unteren Randes wieder nach oben. Das macht er auch, aber dann gehts wieder runter, und wieder hoch, und runter, ...
Das kompilierte Programm
Der ganze Quellcode
Hoffe da kann mir jemand weiterhelfen.
Vielen Dank und frohes Fest ,-))
WLaner
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Solange "bMoveDown" nicht zu einer globalen oder wenigstens einer static variable gemacht wird, ist das rel. sinnfrei.
Nicht umbedingt. Wenn wir den Else-Zweig des äußeren IF-Konstrukts weglassen, und dessen Inhalt hinter die das erste If setzen dann sollte es das tun was es tun soll (unter der Vorraussetzung daß ich um diese Uhrzeit noch einen hinreichend klaren Verstand habe):
Btw: Den letzten Block könnte man auch kürzer schreiben als:
Gruß
Borlander
Nicht umbedingt. Wenn wir den Else-Zweig des äußeren IF-Konstrukts weglassen, und dessen Inhalt hinter die das erste If setzen dann sollte es das tun was es tun soll (unter der Vorraussetzung daß ich um diese Uhrzeit noch einen hinreichend klaren Verstand habe):
bool bMoveDown = TRUE;
if(iActY >= rect.bottom)
{
iActY = rect.bottom-1;
bMoveDown = FALSE;
}
// weg mit else {
if(bMoveDown == FALSE)
{iActY--;}
else
{iActY++;}
// weg mit }
return iActY;
Btw: Den letzten Block könnte man auch kürzer schreiben als:
!bMoveDown ? iActY-- : iAchY++;
bzw. bMoveDown ? iActY++ : iAchY--;
oder alternativ für ganz schreibfaule auch (wobei ich diese Version am schönsten finde, da die Variable nur einmal auftaucht, sowie anschließend die Verschiebung):iAchY += bMoveDown ? 1 : -1;
;-)Gruß
Borlander