Autor Beitrag
German_Chiller
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 14.02.10 18:19 
Ich wollte eine Simulation von einem Ball machen, der immer fällt, aufspringt, aufsteigt usw. bis er liegen bleibt.

Damit ich den die Fallstrecke berechnen kann, brauche ich eine Zeit, damit es realistisch aussieht und ich nicht jedes Mal an den Thread.Sleep(x) werten herumspielen muss

Gibt es so einen Befehl, der mir die Zeitspanne in Millisekunden ausgibt?

...
for (....)
{
//anfangszeitpunkt

//warten

//endzeitpunkt

//Zeitspanne

}
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.02.10 18:31 
Hallo und :welcome: bei uns im Forum!

Dafür gibt es die Stoppuhr bei .NET, also Stopwatch.
Davon erstellst du dir eine Instanz, kannst diese dann starten und stoppen und in Elapsed sehen wieviel Zeit vergangen ist dazwischen.
msdn.microsoft.com/e...opwatch.elapsed.aspx

Ist nur noch die Frage ob das für deinen Anwendungszweck genau genug ist.
German_Chiller Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 14.02.10 19:08 
Ich hab es jetzt mal mit Stopwatch gemacht, aber der Punkt bewegt sich nicht so, wie er soll
Als Beispiel hab ich jetzt eine lineare Bewegung genommen. Der Punkt beschleunigt, dann stoppt er wieder ab, bis er steht, dann beschleunigt er wieder usw...
obwohl er sich eigentlich gleichförmig bewegen sollte. Ist die Zeit richtig gemessen?

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
private void button1_Click(object sender, EventArgs e)
        {
            Graphics Grafik;
            float hoehe = 0;
            float strecke = 0;
            float zeit = 0;
            Stopwatch stopWatch = new Stopwatch();
            TimeSpan timeSpan;
            Grafik = this.CreateGraphics();
            //Ausgangsposition
            Grafik.FillEllipse(Brushes.Lime, 10005050);

            stopWatch.Start();
            Thread.Sleep(100);
            //Solange er nicht am unteren Rand vom Fenster ist
            while (hoehe < 500)
            {
                stopWatch.Stop();
                timeSpan = stopWatch.Elapsed;
                zeit = timeSpan.Milliseconds;

                //v = 20 Pixel pro Sekunde
                strecke = 20 * (zeit / 1000);
                hoehe = hoehe + strecke;
                Refresh();
                Grafik.FillEllipse(Brushes.Lime, 100, hoehe, 5050);
                stopWatch.Start();
                //Warten
                Thread.Sleep(100);
            }
        }


Moderiert von user profile iconKha: C#-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.02.10 19:13 
Solange du die abgelaufene Zeit nicht resettest wird die neue Zeit jeweils addiert. ;-)
German_Chiller Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 14.02.10 19:17 
kaum macht man es richtig, funktioniert es^^
danke für die schnelle hilfe...
German_Chiller Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 21.02.10 00:21 
Mein Programm läuft jetzt, der Ball springt jetzt in meinem Fenster hin und her, aber er flackert ab und zu, obwohl ich Thread.Sleep(10) habe, also genug zeit bleiben sollte...

Wie kann ich das flimmern des Balls wegbekommen?
ThomAlex
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58

Windows 7
C# (VS08) Games via XNA (privat) oder WinForms (Schule)
BeitragVerfasst: So 21.02.10 03:27 
Vielleicht solltest du DoubleBuffern, also im BackBuffer zeichnen und am Ende das Ergebnis in den Frontbuffer bringen. Setze die Eigenschaft Doublebuffered deiner Form auf true, dann könnte es gehn. MFG ThomAlex

edit: Falls das nicht klappt würde mich auch gerne mal interessieren, woran es liegt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 21.02.10 12:29 
Ein Thread.Sleep(10) erscheint mir auch ein bisschen kurz zu sein. Es gibt da immer die Diskussion, welche Zeitabstände man unter Windows noch garantieren kann, aber 10 Millisekunden sind auf jeden Fall ziemlich kritisch. Das wären außerdem 100 Bilder pro Sekunde, was man wahrscheinlich nicht braucht.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".