AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bewegung: Animation durch Off-Screens
Thema durchsuchen
Ansicht
Themen-Optionen

Bewegung: Animation durch Off-Screens

Ein Thema von Jazzman · begonnen am 18. Sep 2007 · letzter Beitrag vom 19. Sep 2007
Antwort Antwort
Jazzman
(Gast)

n/a Beiträge
 
#1

Bewegung: Animation durch Off-Screens

  Alt 18. Sep 2007, 10:21
Hallo Gemeinde,
ich suche seit längerem ein Tutorial o.ä. welches sich mit der Bewegungsdarstellung mit Hilfe von GDI -- also weder mit OpenGl, DelphiX etc, sondern nur mit Delphi "eigenen" Hausmitteln beschäftigt.

Mir ist vor allem folgendes nicht klar:

- Wenn ich DoubleBuffer := TRUE auf der entsprechenden Form sitzen habe, ist es dann überhaupt nötig mit OffScreens zu arbeiten? (Also, das Zeichnen im Speicher und dann das fertige Bild zeigen lassen).

- Was ist die schnellste Methode das Bild im Speicher auf ein sichtbares bmp zu kopieren: Ist es BitBlt -- und wenn ja, warum ist es bei mir so elend langsam (ich weiss, doofe Frage!)?

- Wie ist es mit der vertikalen Synchronisation VSYNCH mit dem Monitor? Also, wenn der Monitor links oben mit seinem Strahl ist, genau dann das Bild aus dem Speicher auf den Monitor kopieren? Notwendig, oder unnötiger Schnickschnack aus vergangenen Zeiten?

Wie gesagt, ein Tutorial, welches die Vor-und Nachteile bestimmter Vorgehensweisen darlegt. Wie machens es die Profis (ja, ich weiss sie nutzen DelphiX oder OpenGl -- aber es geht nicht um 3D oder super aufwendiges Rendering, sondern darum wie man nach allen Regeln der Kunst ein Rechteck über den Monitor bewegt.)

Sorry, ein Haufen Fragen, aber das ist mir z.Z. wirklich nicht ganz klar.

Vielen Dank vorab für Ideen/Kommentare/Links.
Schönen Gruß
Jazzman
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bewegung: Animation durch Off-Screens

  Alt 18. Sep 2007, 10:37
doubleBuffered ist eigentlich nur notwendig wenn du wirklich Komponenten wandern lässt. Dies hat allerdings den Nachteil das die Auslasung sehr hoch werden kann. Denn sobald du irgend eine Komponente (TImage etc.) bewegst wird sofort neu gezeichnet. Wenn du also 10 Dingen nacheinander bewegst (die Position änderst) wird 10 mal neu gezeichnet.

Um eine ordentliche Performance zu erreichen hab ich es bisher so gemacht:
- Eine Displaykomponente
- eine Bildkomponente (von TComponent abgeleitet)

Die Bildkoponenten haben das property Display wo die Displaykomponente zugewiesen werden kann.
Wenn sich das bild ändert (oder die Position) sagt diese Komponente einfach der Displaykomponente das diese sich neu zeichnen müsste (inklussive aller Bildkomponenten die sich darauf darstellen). Die Displaykomponente zeichnet jetzt aber nicht sofort alle Bildkomponenten sondern setzt einfach ein Flag das neu gezeichnet werden müsste.

Delphi-Quellcode:
procedure TDisplay.CheckRedrawTimer(Sender: TObject);
begin
  if (lastdraw + 40000 < GetTickCount()) and (fNeedRedraw) then
  begin
    lastdraw := GetTickCount();
    Invalidate();
  end;
end;
Wie man genau so etwas macht ist eben eine Sache des Programmierers. Programmieren heißt ja nicht einfach nur tippen sondern sich auch Gedanken zu machen wie man etwas am besten umsetzt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Bewegung: Animation durch Off-Screens

  Alt 19. Sep 2007, 13:12
Ich mache sowas z.z. alles in einer hintergrund TBitMap rein.
und zeichne nur das Neu was sich geändert hat.

So habe ich keine 100% CPU Auslastung sondern nur 2-10% oder so.

z.b. könnten alle 2D spiele nach dem gleichen verfahren gehen.

Auch Animationen sind leicht, habe ich zwar noch nie wirklich gemacht, aber dürften kein Problem sein mit bitbtl.
Musst dir halt nur eine Liste erstellen mit Position Angaben wo sich jede Grafik befindet und sie nach einander abspielen z.b. mit einem Timer !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bewegung: Animation durch Off-Screens

  Alt 19. Sep 2007, 13:13
das von mir beschriebene arbeitet mit animationen. Dann kommt man aber meist nicht drumherum alles neu zu malen weil ja auch das neu gemalt werden muss wo die Figur vorher stand.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Bewegung: Animation durch Off-Screens

  Alt 19. Sep 2007, 13:19
Ja das Speichere ich in einem 2 Buffer.
Da kommt der Hintergrund rein. Und ich zeichne jetzt bevor ich die Figur bewege den Teil neu, das hole ich mir aus dem 2. Buffer erst danach zeichne ich die Figur an der neuen Stelle.

Also ich zeichne bei mir nicht immer alle Grafiken mit samt den Hintergrund neu sondern nur das was ich gerade brauche im Prinzip könnte es auch bei mehren bewegten Grafiken klappen, da bin ich mir noch nicht ganz sicher.....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz