Ich schreibe eine alte Schule ASCII-DOS-Eingabeaufforderungsspiel. Ehrlich gesagt versuche ich, ZZT zu emulieren, um mehr über diese Marke des Spielentwurfs zu lernen (selbst wenn es antiquated ist)ASCII DOS Games - Rendering-Methoden
mir geht es gut, erhielt meinen Vollbildtextmodus, um zu arbeiten und ich kann Welten schaffen und mich bewegen herum ohne Probleme, aber ich kann keine vernünftige Timing-Methode für meine Renderings finden.
weiß, dass ich meine Rendering-und Pre-Rendering-Code ist schnell, weil, wenn ich jede Verzögerung nicht add() s oder (clock() - renderBegin)/CLK_TCK Kontrollen von time.h der macht unglaublich schnell sind.
Ich möchte nicht mit delay() arbeiten, da es meines Wissens plattformspezifisch ist und obendrein kann ich keinen Code ausführen, während es verzögert (Wie Benutzereingabe und -verarbeitung). Also habe ich beschlossen, etwas zu tun:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
der sollte in „Theorie“ gut funktionieren. Das Problem ist, dass ich, wenn ich diesen Code (Einstellung der RenderInterval auf 0.0333 oder 30fps) nicht nahe an 30fps, bekomme ich mehr wie 18 bei max.
Ich dachte, vielleicht würde ich versuchen, den RenderInterval auf 0.0 zu setzen, um zu sehen, ob die Leistung hochkletterte ... es tat es nicht. Ich war (mit einem RenderInterval von 0.0) bei max ~ 18-20fps.
Ich vielleicht vielleicht, da ich ständig all diese Uhr() und "dividiere das durch diese" Methoden Ich verlangsamte die CPU etwas beängstigend, aber wenn ich die Render-und BallLogic Anrufe aus der if-Anweisung Klammern nahm und setze RenderInterval auf 0.0 Ich bekomme, wieder blitzschnell rendert.
Das macht keinen Sinn für mich, wenn ich das If Check-in verließ, sollte es nicht genauso langsam laufen? Ich meine, es immer noch alle Berechnungen
BTW mit Borland ich kompilieren Turbo C++ zu tun hat V1.01
ZZT:
die Hauptschleife someting wie sein lassen! Ich habe dieses Spiel geliebt. – caf
Sie und ich beide, Café. ('#throwstar suchen'). @ Parad0x13: Wenn es Ihnen nichts ausmacht, weg von DOS zu gehen, schrieb ich eine Bibliothek, um diesen Grafikstil auf jeder von SDL unterstützten Plattform zu emulieren: http://libfake437.googlecode.com –
Wenn Sie das Ergebnis von 'Uhr speichern () 'und den gespeicherten Wert zuweisen, Sie werden einen Anruf speichern (der schnellste Code ist der Code, den Sie nicht anrufen) und es wird genauer (sonst verlieren Sie die Zeit zwischen dem ersten Aufruf' Uhr() ' , hat die ganze Mathematik gemacht und den Zweig gehandhabt). Dieser Genauigkeitsverlust lässt das Spiel langsamer laufen, als Sie möchten, selbst wenn Sie die CPU-Nutzung nicht mehr ausschöpfen. (edit: haha, habe gerade das Datum dazu gesehen, naja) –