while(1)
{
while(time < 12*16) // 16 ticks = 1 Sekunde
{
time += time_step;
wait(1);
}
sky_1.flags2 &= ~SHOW;
sky_2.flags2 |= SHOW;
time = 0;
while(time < 12*16)
{
time += time_step;
wait(1);
}
sky_1.flags2 |= SHOW;
sky_2.flags2 &= ~SHOW;
wait(1);
}
vor dem letzen wait(1); fehlt ein time = 0;, sonst blinkt der Nachthimmel(sky_1) nur kurz auf, nicht für 12 Sekunden, wenn ich mir erlauben darf dich zu verbessern.
Logische erklärung: time ist am Ende der Schleife immer noch 12*16, daher wird die erste while(time < 12*16) Schleife ausgelassen, der sky_1 ist ein Tick sichtbar, dann wird der Himmel auf sky_2 gestellt und time auf 0 gestellt.
richtiger Code:
void do_sky()
{
var time = 0;
sky_1.flags2 |= SHOW;
sky_2.flags2 &= ~SHOW;
while(1)
{
while(time < 12*16) // 16 ticks = 1 Sekunde
{
time += time_step;
wait(1);
}
sky_1.flags2 &= ~SHOW;
sky_2.flags2 |= SHOW;
time = 0;
while(time < 12*16)
{
time += time_step;
wait(1);
}
sky_1.flags2 |= SHOW;
sky_2.flags2 &= ~SHOW;
time = 0; //<-- das entscheidende Stück
wait(1);
}
}