none
Timer läuft nicht gleichmäßig. RRS feed

  • Frage

  • Ich wollte eine art animation machen, die eine bestimmte anzahl von PictureBoxen von unten nach Oben bewegtm, jedoch, je mehr PictureBoxen dazu kommen, desto langsamer wird das ganze. Der Prozessor ist auch fast gar nicht ausgelastet... vielleicht habt ihr ja ne andere Idee, wie ich das besser lösen kann... vielleicht ohne Pictureboxen.

    Also beim tippen auf die Rechte-, Linke- oder Untere Pfeiltaste, kommt jenachdem eine Grafik.

    Quellcode:

    Dim pican As Int64 = 0
      Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        Select Case e.KeyCode
          Case Keys.Right
            Dim nc As PictureBox = New PictureBox()
            nc.Image = My.Resources.bluestone
            nc.Location = New Point(227, 297)
            nc.Size = New Size(65, 20)
            nc.Name = "Stone" & pican
            Panel1.Controls.Add(nc)
            RichTextBox1.Text = RichTextBox1.Text & vbNewLine & "3-" & zeit
            pican = pican + 1
          Case Keys.Left
            Dim nc As PictureBox = New PictureBox()
            nc.Image = My.Resources.redstone
            nc.Location = New Point(22, 297)
            nc.Size = New Size(65, 20)
            nc.Name = "Stone" & pican
            Panel1.Controls.Add(nc)
            RichTextBox1.Text = RichTextBox1.Text & vbNewLine & "1-" & zeit
            pican = pican + 1
          Case Keys.Down
            Dim nc As PictureBox = New PictureBox()
            nc.Image = My.Resources.greenstone
            nc.Location = New Point(124, 297)
            nc.Size = New Size(65, 20)
            nc.Name = "Stone" & pican
            Panel1.Controls.Add(nc)
            RichTextBox1.Text = RichTextBox1.Text & vbNewLine & "2-" & zeit
            pican = pican + 1
        End Select
      End Sub
      Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim i = 0
        Dim bis = Panel1.Controls.Count - 1
        Do While (i <= bis)
          Panel1.Controls(i).Location = New Point(Panel1.Controls(i).Location.X, Panel1.Controls(i).Location.Y - 5)
          If Panel1.Controls(i).Location.Y < -20 Then
            Panel1.Controls.Remove(Panel1.Controls(i))
            bis = bis - 1
            i = i - 1
          End If
          i = i + 1
        Loop
      End Sub
    

    Den Timer habe ich auf ein Interval von 10 Millisekunden gesetzt, damit es nicht ruckelt.

    Bei ungefähr 20 Grafiken, wird die animation langsamer.

    Freitag, 17. Dezember 2010 18:17

Antworten

Alle Antworten

  • Den Timer habe ich auf ein Interval von 10 Millisekunden gesetzt, damit es nicht ruckelt. Bei ungefähr 20 Grafiken, wird die animation langsamer.
    Hallo M,

    10ms im .NET-WinForms Umfeld und solchen Code dürfte immer schwierig sein  (und auch sehr abhängig von Rechnerleistung/sonstigen Tasks).
    Vor einem Monat:
    http://social.msdn.microsoft.com/Forums/de-DE/wpfde/thread/937859f0-6f10-43a0-ad85-4b89e44819ae

    war WPF doch noch ein Thema (?), was für solches eigentlich deutlich besser geeignet wäre...
      (leider hast du damals nichts von 'Animation' gesagt, daher Antworten unter diesem Aspekt wohl nicht passend?)
    Freitag, 17. Dezember 2010 18:31
  • Naja was WPF angeht, ist mir das mit den Images zu kompliziert, da das mit den Rescourcen nicht funktioniert, denn man muss die Bilder vorher irgendwo ablegen und dann den Pfad irgendwie da rein tun, also war mir das zu kompliziert und mir hat Windows Forms gereicht, aber für mein jetziges Ziel geht das wohl nur mit WPF :(

    Aber trotzdem danke

    Freitag, 17. Dezember 2010 19:12