Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

GraProgrammierung->TurboP.7.0->HÄUFIGES_CLEARDEVICE==> FLIMMERT

KoRny Boy / 7 Antworten / Flachansicht Nickles

Moinsen!
Ich programmiere seit Sommer 2003 mit Turbo-Pascal7.0.
Hab schon so\'n bissel mit Grafikprogrammierung gearbeitet.

Ich hab eine Hubschrauber programmiert, welcher sich mit ver-
schiedenen Tasten steuern lässt. Jedes Mal wenn ich ihn bewege,
wird das Bild (Hintergrundbild: brauner Boden und ein Baum) neu aufgebaut. Wenn ich die Steuerungstaste gedrückt halte, um schneller
zu fliegen, wird also bei jedem Signal das Bild ge\'ClearDevice\'t.
Dann entsteht ein Flimmern. Wie kann ich das verhindern????
Gruß KoRny Boy

Wer anderen eine Grube gräbt ist selbst ein Schwein
bei Antwort benachrichtigen
Andreas42 KoRny Boy „Jo, aber ich hab nicht gecheckt, wie man den Hintergrund Baum,Boden,Himmel als 1...“
Optionen

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

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen