Dobrý deň, urobil som jednu takú pokusnú blbosť, aby som si vyskúšal frame dropping a neviem, kde je chyba, ale zdá sa mi, že to nerobí to, čo by to malo robiť.Ide o takú guličku, ktorá by sa mala zvetšovať z priemeru 20 px na veľkosť formulára, ale mne sa to najprv začne z 20 px zmenšovať, a keď to dosiahne veľkosť asi 0 px, tak sa to začne zvetšovať z 20 px na veľkosť o 20 px menšiu, než veľkosť formulára.Guľočka má výplň pravidelného prechodu medzi Color.Firebrick a COlor.FloralWhite(color.firebrick je v ľavom hornom rohu, color.floralwhite je v pravom dolnom rohu).Je vždy v strede formulára, čo je v poriadku, ale to, ako sa mení veľkosť sa mi dosť nezdá. Mám to celé rozdelené na dva súbory: FDCore.vb:
Public Class FDCore
Public Shared Function get_dynval(ByVal lastframelen_ms As Integer, ByVal speed_pxpersec As Integer) As Integer
Return (speed_pxpersec / 1000) * lastframelen_ms
End Function
Public Shared Function get_dynsz(ByVal lastframelen_ms As Integer, ByVal valmax As Integer, ByVal valmin As Integer, ByVal valcurrent As Integer, ByVal speed_pxpersec As Integer) As Integer
Return (((get_dynval(lastframelen_ms, speed_pxpersec) + valcurrent) - valmin) Mod (valmax)) + valmin
End Function
End Class
Form1.vb:
Public Class Form1
Friend sz As Int32 = 20
Friend Const Min As Int32 = 20
Friend lastframelen As Integer = 0
Friend framestarttickcount As Integer
'Friend timer As Diagnostics.Stopwatch
Public Sub New()
InitializeComponent()
DoubleBuffered = True
'initfdtimer()
End Sub
'Friend Sub initfdtimer()
' timer = New Diagnostics.Stopwatch
' timer.Reset()
'End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
'Timer.Start()
framestarttickcount = Environment.TickCount
With e.Graphics
.Clear(Color.White)
Dim ballbrush As Brush
ballbrush = New Drawing2D.LinearGradientBrush(PointF.Empty, New PointF(ClientSize.Width, ClientSize.Height), Color.Firebrick, Color.FloralWhite)
updateball()
.FillEllipse(ballbrush, CSng((ClientSize.Width / 2) - sz / 2), CSng((ClientSize.Height / 2) - sz / 2), CSng(sz), CSng(sz))
End With
'Timer.Stop()
'lastframelen = Timer.ElapsedMilliseconds
lastframelen = framestarttickcount - Environment.TickCount
'Timer.Reset()
Invalidate()
End Sub
Friend Sub updateball()
sz = FDCore.get_dynsz(lastframelen, Math.Min(ClientSize.Width, ClientSize.Height), Min, sz, Math.Min(ClientSize.Width, ClientSize.Height))
End Sub
End Class
|