Hallo,
ich habe vorhin Tasten genutzt, die bestimme Variablen ändern, zum Beispiel so im KeyDown-Handler:
Und das für alle möglichen Richtungen und Winkel.
Es gibt eine Methode, die etwas asynchron berechnet:
Wenn die Methode fertig ist, soll die GUI geupdatet werden.
Beispiel: Ich drücke
Ich hatte schon probiert, die Berechnung nicht asynchron laufen zu lassen. Oder
Die Berechnung inkl. GUI-Update dauert 293 Millisekunden. Ich kann nicht zu schnell geklickt haben.
Die anderen Werte werden brav geupdatet.
Edit: Ich habe gerade festgestellt, CamDir wird doch nicht richtig neu beschrieben...
ich habe vorhin Tasten genutzt, die bestimme Variablen ändern, zum Beispiel so im KeyDown-Handler:
Und das für alle möglichen Richtungen und Winkel.
Es gibt eine Methode, die etwas asynchron berechnet:
Wenn die Methode fertig ist, soll die GUI geupdatet werden.
Beispiel: Ich drücke
U
, das den X-WInkel um 1 erhöht. Dann drücke ich I
, das den X-Winkel um 1 erniedrigt. Also jetzt erwarte ich, dass alles so wie vorher ist. Leider muss ich 2×, teilweise 3×, I
drücken, weil sich die GUI nicht updatet. Ich habe dann natürlich zu viel erniedrigt. Die Berechnung stimmt; das habe ich geprüft. Ich nutze mittlerweile ein Event, welches feuert, wenn in Draw
der letzte Schritt fertiggestellt ist. Leider ohne Erfolg.Ich hatte schon probiert, die Berechnung nicht asynchron laufen zu lassen. Oder
CamDir
shared zu machen. Mit Buttons hab ich's auch probiert.C#-Quellcode
- private void On_GUI_Update_required(object sender, EventArgs e)
- {
- this.Invoke((Action)(() => Update_GUI()
- ));
- }
- private void Update_GUI()
- {
- PictureBox1.Image = null;
- PictureBox1.Image = B_3D_Engine.displayedBitmap;
- Label_Kamera_x.Text = Math.Round(B_3D.CameraPos.x, 0).ToString(Deu);
- Label_Kamera_y.Text = Math.Round(B_3D.CameraPos.y, 0).ToString(Deu);
- Label_Kamera_z.Text = Math.Round(B_3D.CameraPos.z, 0).ToString(Deu);
- Label_Obj_x.Text = Math.Round(B_3D.cu.x_angle, 0).ToString(Deu);
- Label_Obj_y.Text = Math.Round(B_3D.cu.y_angle, 0).ToString(Deu);
- Label_Obj_z.Text = Math.Round(B_3D.cu.z_angle, 0).ToString(Deu);
- Label_look_at.Text = $"{Math.Round(B_3D.CamDir.x, 2).ToString(Deu)} | {Math.Round(B_3D.CamDir.y, 2).ToString(Deu)} | {Math.Round(B_3D.CamDir.z, 2).ToString(Deu)}";
- }
Die Berechnung inkl. GUI-Update dauert 293 Millisekunden. Ich kann nicht zu schnell geklickt haben.
Die anderen Werte werden brav geupdatet.
CamDir
ist in der Instanz B_3D ein Vektor. Allerdings ist das bei mir eine separate Klasse.CamDir
wird bei jedem Aufruf von Draw()
neu berechnetCamDir = new SimpleVector(...
Edit: Ich habe gerade festgestellt, CamDir wird doch nicht richtig neu beschrieben...
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Bartosz“ ()