JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

C#: Bildaufbau

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 25.11.2004, 20:08    Titel: C#: Bildaufbau Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 25.11.2004, 23:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 26.11.2004, 02:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 28.11.2004, 13:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum