Thread::Sleep zeit immer noch zu groß
-
Und? Dann hast du halt nicht nur eine Koordinatenvariable, sondern halt noch ne Liste von alten Koordinatenvariablen die die Bahn darstellen.
-
nein, ich habe immer nur die neueste variable, die anderen sind schon gezeichnet und damit abgehackt... ^^ aber die is auch nicht in Paint
-
</Exit> schrieb:
die anderen sind schon gezeichnet und damit abgehackt... ^^
Nein, glaub ich eher nicht Verschieb dein Fenster mal oder sowas ähnliches, dann siehst du dass nach deiner Methode(einmal gezeichnet und dann sein lassen) nicht viel von übrig bleibt. Zeichnen solltest du immer im Paint, nirgends anders.
-
ja ich weiß das, aber hast du ne Ahnung wie viele *kleine* Punkte so ne Bahnkurve hat? Wenn ich die alle speichere dann gibts irgendwo nen Crash, v.a. weil es sogenanntes Chaos-Verhalten gibt, bei denen der Planet immer was neues macht, aber nie abhaut oder in die Sonnen stürzt...
von daher ist der Speicheraufwand zu groß und löschen kann ich die Bahnkurve dann auch nicht so einfach (im Moment über Refresh() ^^)
-
</Exit> schrieb:
Wenn ich die alle speichere dann gibts irgendwo nen Crash, v.a. weil es sogenanntes Chaos-Verhalten gibt, bei denen der Planet immer was neues macht, aber nie abhaut oder in die Sonnen stürzt...
was hat denn das speichern der Punkte der Bahnkurve mit dem Verhalten der Simulation zu tun. Simulation und Visualisierung der Ergebnisse sind doch zwei völlig verschiedene Punkte.
von daher ist der Speicheraufwand zu groß und löschen kann ich die Bahnkurve dann auch nicht so einfach (im Moment über Refresh() ^^)
*rofl* Nehmen wir mal an du beschreibst nen Punkt auf der Bahn durch 2 int Werte, sind 8 Byte, okay nehmen wir noch Overhead rein und sagen wir der Punkt lässt sich mit 12 Byte beschreiben. Dann nehmen wir mal 100000 Punkte und erhalten knapp 1,1 MB - wo bitte ist das viel Speicher?!? Löschen der Bahn ist leichter als alles andere indem du einfach die Punkte aus der Liste der Bahnkurve löscht. Ich weiß, ist ein wenig arg naive Rechnung, trotzdem sieht man das dein Argument vom Speicherverbrauch falsch ist - da selbst die von mir angenommenen 100000 Punkte arg viel für ne Bahnkurve sind, weil man soviel gar net sinnvoll zeichnen kann auf nem normalen Bildschirm.
Also dein Vorgehen mag für dich irgendwie funktioniere, technisch ist der aber vollkommener Murks.
-
na gut, nach deiner Rechnung seh ich es ein, aber deine Art des Löschens hab ich nicht gepeilt... ^^
-
Ich zeig dir mal in Pseudocode wie ich des meine...
Position aktPlanetenPosition; List<Position>Bahnpunkte; . Paint(...) { zeichnePlanetenPosition(); foreach(Position p in Bahnpunkte) { zeichneBahnpunkt(p); } } . zeichnePlanetenPosition() { // zeichne Planeten an der Position aktPlanetenPosition } . zeichneBahnpunkt(Position Bahnpunkt) { // Punkt zeichnen } . simulate() { Bahnpunkte.Add(aktPlanetenPosition); aktPlanetenPosition = BerechneNeuePosition(aktPlanetenPosition); // mit Invalidate neuzeichnen erzwingen } . clearBahnPunkte() { Bahnpunkte.Clear(); }
Die Simulate rufst du durch nen Timer im gewünschten Intervall auf und schon wird alles automatisch immer gezeichnet. Indem du einfach die Liste der Bahnpunkte löscht, wird erreicht dass keine Bahn mehr gezeichnet.
-
aso, du spaltest das auf... bei mir wird (im Mom) der punkt ausgerechnet UND gezeichnet.
Noch ne Frage, eigentlich (ist auch im Mom so) soll auf Knopfdruck, das passieren, aber du rufst das doch über Paint auf... Damit wirds doch immer gemacht, wenn das Fenster neu gezeichnet wird.
-
Ja dann machst halt sowas.
bool zeichnePlanet; . Paint(...) { if(zeichnePlanet) { zeichnePlanetenPosition(); foreach(Position p in Bahnpunkte) { zeichneBahnpunkt(p); } } }
Über die boolsche Variable steuerst du ob gezeichnet werden soll oder nicht.
-
also mal thx, ich werd sehn wie ich es umsetze... thx