ich so etwas wie dies stattdessen tun würde:
int t0=0,t1=0,t=0,s0=0,s1=0,render=1;
for (;;)
{
if (some stop condition like keyboard hit ...) break;
// update time, state
if (t>=t0) { render=1; s0=!s0; if (s0) t0+=10; else t0+=200; }
if (t>=t1) { render=1; s1=!s1; if (s1) t1+=10; else t1+=300; }
// render
if (render)
{
render=0;
cleardevice();
if (s0) circle(10,10,2);
if (s1) circle(20,10,2);
}
// update main time
delay(10); // Sleep(10) would be better but I am not sure it is present in TC++
t+=10;
if (t>10000) // make sure overflow is not an issue
{
t -=10000;
t0-=10000;
t1-=10000;
}
}
Passen Sie den Code nicht getestet ist, wie ich es direkt hier geschrieben (so könnte es Syntax Fehler oder Tippfehler). Die Grundidee ist eine globale Zeit t
mit klein genug Granularität (10ms
). Und für jedes Objekt haben Zeit des Ereignisses (t0,t1
) Zustand des Objekts (s0,s1
) und Perioden (10/200 , 10/300
).
Wenn die Hauptzeit die Ereigniszeit erreicht, tauschen Sie den Status ein/aus und aktualisieren Sie die Ereigniszeit auf die nächste Zustandsaustauschzeit.
Auf diese Weise können Sie eine beliebige Anzahl von Objekten nur sicherstellen, dass Ihr Hauptzeitschritt klein genug ist.
Das Render-Flag stellt nur sicher, dass die Szene nur bei Änderung gerendert wird.
Timing verbessern Sie RDTSC statt t+=10
und tatsächlich messen, wie viel Zeit vergangen ist mit CPU Frequenzgenauigkeit verwenden können.
TurboC Ändern ++? Sind Sie sicher, dass Sie diesen alten Compiler verwenden möchten? –
Ja, ich bin ein Anfänger und möchte nur das verwenden –
Verwenden Sie keine Verzögerung gibt es viele Möglichkeiten, Zeit C++. Versuchen Sie, Chrono und verwandte Gegenstände zu betrachten. Warte ... das ist C++ 11 ... Ich bezweifle, dass TurboC++ das kann ... – Matt