[VB.NET] Tekstanimatie kost te veel rekenkracht

Pagina: 1
Acties:

  • Vjenne
  • Registratie: Oktober 2001
  • Laatst online: 28-04 23:47
Ik ben in het programmeren van visual basic nog echt een beginner. Maar omdat ik net een afstandbediening voor mijn comp heb gehaald wilde ik een pop up menu maken in VB.
Hierbij wil ik het menu, een paar regels tekst dus, heel soepeltjes omhoog of omlaag laten bewegen, bij het indrukken van een toets.

Ik heb het nu op twee manieren gedaan. Met de Drawstring methode en daarbij wel anti aliasing aan(anders ziet het er niet uit). en met een paar labels onder elkaar die ik dan gewoon van positie verander. Dit laatste gaat helemaal niet, dit duurt echt eeuwen.
Verder heb ik met beide methoden tijdens het bewegen van de tekst een processor verbruik van 80-90%. Ongeacht doublebuffer aan of uit staat.
Het lijkt me dat het beter moet kunnen maar ik zou niet weten hoe.

Ik gebruik verder een form met een backgroundimage en een opacity van 90%. Op 100% loopt het al een stukje beter, maar mijn comp (866mHz) moet dit toch wel aankunnen neem ik aan?
Wie weet op welke manier ik wel een weinig rekenkracht vereisende soepele scroll kan maken?

heb nu dit:
code:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Public Class MainMenu
    Private anim_int As Integer
    Private anim_richting As Integer
    Private regels(4) As String
   

    Dim TextFont As New System.Drawing.Font("Verdana", 18, FontStyle.Bold)
    Dim TextBrush As New System.Drawing.SolidBrush(Color.FromArgb(200, 255, 255, 255))




    Private Sub MainMenu_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        If e.KeyCode = 40 Then  'down
            anim_richting = 2
            Timer1.Start()
        ElseIf e.KeyCode = 38 Then 'up
            anim_richting = -2
            Timer1.Start()
        End If
    End Sub


    Private Sub MainMenu_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        regels(0) = "Media Portal"
        regels(1) = "Winamp"
        regels(2) = "DVD speler"
        regels(3) = "Media speler"
        regels(4) = "Afsluiten"
        DoubleBuffered = True


 End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        anim_int = anim_int + anim_richting

        If anim_int > 30 Or anim_int < -30 Then
            anim_int = 0
            Timer1.Stop()
            Dim i = 1
            If (anim_richting > 0) Then
                Dim temp = regels(regels.Length - 1)
                Dim z As Integer = regels.Length - 1
                Do Until z < 1
                    '  MsgBox(regels(z - i))
                    regels(z) = regels(z - 1)
                    z -= 1
                Loop
                regels(0) = temp
            Else
                Dim temp = regels(0)
                Dim z As Integer = 0

                Do Until z > regels.Length - 2

                    regels(z) = regels(z + 1)
                    z += 1
                Loop
                regels(regels.Length - 1) = temp
            End If
        End If

      
        Invalidate()


    End Sub

    Private Sub MainMenu_onPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim objCanvas = e.Graphics
        objCanvas.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit
              For x As Integer = 0 To regels.Length - 1
                      objCanvas.DrawString(regels(x), TextFont, TextBrush, 35, 90 + (x * 30) + anim_int)
        Next x
   End Sub

   
End Class

[ Voor 55% gewijzigd door Vjenne op 15-10-2005 19:01 ]


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Ik denk dat je de tekst beter om kunt zetten naar een bitmap. Bitmap-plaatjes kan je vliegensvlig ergens op je form afdrukken, dat gaat veel sneller dan strings tekenen in elk geval.

Siditamentis astuentis pactum.


  • Vjenne
  • Registratie: Oktober 2001
  • Laatst online: 28-04 23:47
Ah ok. Kan ik dat omzetten gewoon met visual basic doen? Ik wil straks namelijk dat hij de regels tekst uit een ini file haalt.

  • Vjenne
  • Registratie: Oktober 2001
  • Laatst online: 28-04 23:47
hmm, heb dus bitmaps gemaakt van de regels maar nog steeds gebruikt het 90% van mijn proc snelheid...
andere ideeen?

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

kan het zijn dat je stapgrootte te klein is ?

heb je al eens overloads van Invalidate() geprobeerd ?

ASSUME makes an ASS out of U and ME