Hi!
Ich bin mir nicht sicher, ob wir von selben reden. ;-)
OK, ich denke du hast folgendes Problem:
- du zeichnest Baum, Boden und Himmel
- dann löschst du den Bildschirm komplett
- und fängst wieder Oben an (mit zeichnen)
-> Das flimmert, weil man sieht, wie der Bildschirm gelöscht wird.
OK, ich würde das mit der Verwendung von zwei Bildschirmseiten umgehen.
Angezeigt wird immer nur eine davon (sonst wär's auch witzlos).
Da man nun eine "unsichbare" Seite hat, sieht man das Löschen und Neuzeichnen nicht.
Wenn ich die "unsichtbare" Seite fertig gezeichnet habe, schalte ich um. Sie wird dann zur neuen Sichbaren und die bisher sichbare wird zur unsichbaren, auf der ich nun wieder löschen und neu zeichnen kann (ohne dass man das sieht).
Der Gag ist nun, dass wir den TP-Befehlen zum Löschen und Zeichnen nicht sagen müssen, in welche Seite sie das gefälligst tun sollen, mit SetActivePage() bestimmen wir einfach, welche Seite die Zeichenbefehle nutzen sollen.
Unabhängig davon, bestimmen wir mit SetVisualPage(), welche der Seiten angezeigt wird.
OK, probiers aus. Hier ist eine Rourtine die das nutzt. Ich schreibe jetzt kein komplettes Programm, ich werde das nochnichtmal mit TP compilieren, dass darfst du machen. ;-)
Es geht nur ums Prinzip, ok:
procedure zeichen.schleife;
var
sichtbar, unsichtbar, altunsichtbar:byte;
begin
{Init}
sichtbar := 1;
unsichbar := 2;
repeat
setactivepage(unsichtbar);
setvisualpage(sichbar);
{jetzt wird gezeichnet, die Prozedur musst du selbst schreiben}
zeichne.bbh;
{zeichnen ist fertig, also umschalten}
altunsichbar := unsichtbar;
unsichtbar := sichtbar;
sichtbar := altunsichtbar;
{das war's}
until keypressed
end;
In der Prozedur musst du jetzt noch deinen Boden, die Bäume und den Himmel zeichnen. Irgendwie musst du in diesem Beispiel dafür sorgen, dass dort ein Zähler (oder sowas) verwendet wird, damit sich das Bild, dass die Prozedur zeichnet etwas bewegt.
Bis denn
Andreas