![]() |
Flackernder Fade-Effect
Hi,
Zum einblenden einer Form im Vollbildmodus lege ich zuerst eine schwarz gestrichene Form über sie und lasse sie(die schwarze Form) dann nach und nach durchsichtig werden. Dafür benutze ich folgende Prozedur:
Delphi-Quellcode:
Leider flackert dieser Vorgang ungemein. Es bilden sich Streifen mit leicht unterschiedlicher Farbabstufung.Procedure TDecke.FadeIn; var i:Byte; begin for I := 25 downto 0 do begin AlphaBlendValue:=round(i*10.2); Zeit.delay(10); end; end; Außerdem scheint die Berechnung sehr hohe Systemanforderungen zu stellen. So dauert es bei meinem Rechner (1 GHz) eine ganze statt einer viertel Sekunde. Ich würde mich freuen, wenn mir jemand Helfen könnte. |
Re: Flackernder Fade-Effect
also ich machs so
Delphi-Quellcode:
isses das was du meinst :?: :wink:
procedure TForm1.Timer1Timer(Sender: TObject);
begin form1.AlphaBlendValue := form1.AlphaBlendValue - 1; if form1.AlphaBlendValue = 10 then begin timer1.Enabled := false; form2.show; form1.hide; end; end; |
Re: Flackernder Fade-Effect
Es bleibt dabei wenn ich die Transparenz langsam verändere (-1), dann bleibt es ruckelfrei, ist aber dafür extrem langsam. Bei - 10 Entstehen die Streifen.
Gibt es denn keine schnelle saubere Variante,eine Form "ein-zu-Faden"? |
Re: Flackernder Fade-Effect
Benutze den Tipp von PiQ (damit läuft es auf unterschiedlich starken "Maschinen" gleich schnell)
und füge in deinem Form im Ereignis "OnCreate" die Zeile "DoubleBuffered := True" ein. Damit werden Änderungen an deinem Form mit dem Aufbau eines neuen Bildes am Monitor synchronisiert! |
Re: Flackernder Fade-Effect
Die Streifen bleiben und die Berechnung scheint immer noch zu kompliziert zu sein.
Warum muss es eigentlich eine ganze schwarze Form sein die über eine andere gelegt wird. Ich vermute einfach das die Versuche bisher nur so eine Art Notlösung sind. Es muss einfacher gehen. Zum Beispiel gibt es ältere Adventure, die solche Effekte auf damaligen Rechnern gezaubert haben(ganz streifenlos und in Windes Eile). |
Re: Flackernder Fade-Effect
Hallo,
alte Spiele (ich vermute Du meinst DOS-Spiele) hatten eine geringe Auflösung und wenig Farben. Außerdem hatten sie komplette Kontrolle über den Rechner. Die einzige Möglichkeit unter Windows, diese Art der Kontrolle zu erlangen, heißt DirectX bzw. OpenGl. Mit dem GDI hast Du schlechte Karten. Du musst bedenken, die Philosophie hinter GDI ist "einfach und kompatibel, dafür langsam". Gruß xaromz |
Re: Flackernder Fade-Effect
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe das mal ausprobiert und bekomme auch Streifen wenn ich den AlphaBlend-Wert
mit Schrittweiten größer 5 setze und den Timer-Wert kleiner setze damit nicht so viel Bilder pro Sekunde berechnet werden müssen. Ich habe meinen Lösungsvorschlag mal angehängt. Es wird besser wenn man die größe des Fensters reduziert... Aber ich fürchte xaromz hat recht: Die alten DOS-Spiele haben bei ca. 320x240 Bildpunkten direkt in den Speicher der Grafikkarte geschrieben und dabei massiv Assembler-Code eingesetzt. Damit sind Geschwindigkeiten möglich von denen jede Hochsprache nur träumen kann. Einen Ausweg bieten da wirklich nur die Grafik-Schnittstellen. Dummerweise muß man in DirectX oder OpenGL deutlich mehr Aufwand treiben als ein simples "AlphaBlendValue := x"... Die Windows-GDI-Bordmittel taugen nur für den Zweck eine konstante Transparenz zu erzeugen aber nicht für einen fließenden Effekt. Da sind einfach zu viele Schichten, Prüfungen und Treiber die vielen verschiedenen Anforderungen gleich gerecht werden müssen und nicht nur auf einen einzigen Zweck hin ausgerichtet bzw. optimiert sind. |
Re: Flackernder Fade-Effect
Alte DOS-Spiele hatten noch einen anderen Trick, sie hatten nämlich in vielen Fällen nur 256 Farben, d.h. eine Palette. Paletten haben ganz viele Nachteile - aber man kann sie prima für allerlei Effekte manipulieren. Man muss quasi nur 256 Einträge von je 2-3 Byte pro Frame bearbeiten, also maximal 768 Byte, statt 320x240. Da kann man also die Palette "ein-faden" statt des Bildes.
Edit: Im Vollbildmodus braucht man doch gar keine Forms. Ab Vista ist dein hausgebackener Einblendeffekt ohnehin hinfällig, und davon abgesehen hast du im Vollbildmodus doch die volle Kontrolle über die Zeichnung. Und da kannst du auch mit der GDI oder von Hand ganz schön schnell alphablenden. |
Re: Flackernder Fade-Effect
Zitat:
so wie du das gemacht hast, sieht es bei mir ähnlich aus wie
Delphi-Quellcode:
AnimateWindow(self.Handle, 2000, AW_BLEND);
|
Re: Flackernder Fade-Effect
@bitsetter: Wo kommt denn "AnimateWindow" her? (finde ich nicht in meiner Delhi/Windows-OH...)
@OregonGhost: Was meinst Du mit "voller Kontrolle" im Vollbildmodus? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz