Hej! Använd sk double buffering. Snabba på grafiken lite
Sitter och skriver ett monopolspel för att lära mig jobba lite med grafik i vb, men undrar om någon har ett förslag på hur man kan snabba upp den här koden lite?
För tillfället använder jag bara en vanlig PictureBox som visar spelplanen, och sedan en klass för varje spelare.
Klassen håller reda på vilken bild den använder för att visa spelpjäsen, och i huvudfönstret går den för varje steg pjäserna tar igenom alla spelarnas pjäser och ritar ut dem på rätt ställe.
Förenklat ser koden ut i princip så här:
Public Sub UpdateForm(ByVal Player As Integer)
Dim i, s as Integer 'for-next variabler
Dim x, y as integer
picBoard.Refresh() 'långsamt!
For i = 0 to TotalPlayers 'Går igenom alla spelarna
'... Lite kod för att räkna ut x och y (var spelpjäserna ska hamna) ...
GameUser(i).Position = Border(GameUser(i).PlayerPosition).Position
GameUser(i).DrawMark(picBoard.Handle, x,y)
Next
End Sub
Sedan ser det ut så här i spelarens klass:
Public Sub DrawMark(ByVal WinHandle As System.IntPtr, ByVal BoardWidth As Integer, ByVal BoardHeight As Integer) 'Ritar ut spelpjäsen
Dim GameGraphics As Graphics
GameGraphics = Graphics.FromHwnd(WinHandle) 'Sätt grafiken på spelplanen (frmmain.picBoard)
GameGraphics.DrawImage(Image, Position.X, Position.Y, BoardWidth, BoardHeight)
GameGraphics.Dispose()
End Sub
Det slöar alltså ner jättemycket att behöva nollställa grafiken (picBoard.Refresh), och sedan lägga ut alla spelpjäser på rätt ställe igen för att spelet för varje liten rörelse på spelplanen.
Några tips på att snabba upp?
Sv: Snabba på grafiken lite
Rita allt på en in-memory bitmap, ej picturebox.
När allt ritande är klar kopierar du hela bitmappen till pictureboxen.