 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 25.11.2004, 20:08 Titel: C#: Bildaufbau |
|
|
Ich benutze für die Grafikdarstellung derzeit GDI+ (weil ich momentan nix anderes kenne bei der Sprache). Es soll ein Diagramm mit Hilfe eines Thread langsam aufgebaut werden. Doch die Bildrate ist extrem langsam. So sehr, dass es stark flimmert. Ich benutze die Funktion "Refresh()", um das Bild zu aktualisieren. Weiß jemand, wie man das beschleunigen kann? Oder kennt jemand bessere Alternativen zur Grafikdarstellung? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 25.11.2004, 23:38 Titel: |
|
|
GDI+ ist schon die beste Möglichkeit, die du hast. (abgesehen von DirectX, was ich in diesem Fall aber als Übertrieben ansehen würde)
Die Frage ist halt vielmehr, WIE du das machst. Gegen Flimmern hilft eine Doppelpuffertechnik, bei der du die Szene in ein Bitmap zeichnest, und das Bitmap danach anzeigst. Wenn du unbedingt Thread's nutzen musst, geht das genauso (schnell oder langsam) wie wenn du das ohne Treads gut ausprogrammieren würdest. Ich würde allerdings nicht über Refresh() gehen, sondern die "Nachrichtenbehandlungsschleife" selbst erstellen und nur mittels System.Windows.Forms.Application.DoEvents() die Windowsmessages manuell bearbeiten sowie die Zeichenarbeit direkt vorzunehmen. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
LeeDiGer Super JLI'ler

Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 26.11.2004, 02:16 Titel: |
|
|
Mit System.Windows.Forms.Application.DoEvents() hab ich vorher noch nix am Hut gehabt. Wie funktioniert das quellcodemäßig in etwa? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 28.11.2004, 13:06 Titel: |
|
|
Bis jetzt hast du in etwa so gemacht: Code: | System.Windows.Forms.Application.Run(new VonFormAbgeleiteteKlasse()); | Jetzt machst du das ganze folgendermassen: Code: | VonFormAbgeleiteteKlasse Klasse=new VonFormAbgeleiteteKlasse();
while(Klasse.LäuftNoch) {
System.Windows.Forms.Application.DoEvents();
Klasse.Zeichenfunktion();
} | Damit werden zwar noch die Windowsnachrichten bearbeitet (DoEvents) aber du musst kein Refresh verwenden, um zu Zeichnen.
Mit CreateGraphics kannst du ohne Probleme ein Graphics-Objekt bekommen.
LäuftNoch ist einfach eine Eigenschaft, die du im Konstruktor auf True setzt, und im Eventhandler für Closing auf False. Im Eventhandler für Closing musst du dann noch die Abbruchbedingung auf True setzen, weil das Programm sonst unkontrolliert beendet wird: Code: | void Klasse_Closing(object o, ClosingEventArgs e) {
Klasse.LäuftNoch=false;
e.Cancel=True;
} |
HTH _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|