Ich programmiere derzeit einen karten-Editor für ein Online-Browsergame. Funktioniert mittlerweile auch alles reibungslos, lediglich mit der Performance habe ich ein Problem.
Sobald die Karte refreshed werden muss (User plaziert neue Textur auf der Karte oder scrollt die Karte) geht die Performance in den Keller, und man darf 5-10 Sekunden warten bis die Karte in der PictureBox neu aufgebaut ist.
Hat jemand eine Idee wie ich die Performance da erhöhen kann?
Folgenden Code benutze ich zum Anzeigen der Karte:
Private Sub kartenaufbau()
stausMap.Caption = "Aktuelle Kartengröße: " & felderx & " x " & feldery & "" & _
"Felder"
If felderx = 0 And feldery = 0 Then Exit Sub
If Not scroll Then
' Für längere Vorgänge
MsgBar Me, "Karte wird aktualisiert.", True
Else
scroll = False
MsgBar Me, "Karte scrollt und wird neu aufgebaut.", True
End If
posX = 295 + (295 / 100 * Abs(zoomz))
posY = -330 - (-90 / 100 * Abs(zoomz))
countX = 59 - (59 / 100 * Abs(zoomz))
countY = 30 - (30 / 100 * Abs(zoomz))
abstandx1 = 118
abstandxx1 = abstandx1 - (abstandx1 / 100 * Abs(zoomz))
zoomx1 = zoomx - (zoomx / 100 * Abs(zoomz))
zoomy1 = zoomy - (zoomy / 100 * Abs(zoomz))
Display.Cls
Set oStream = oFSO.OpenTextFile(App.Path & "\mapper.con", ForReading)
gfxpfad = oStream.ReadLine
oStream.Close
For tabd = 1 To 19
For tabe = 1 To 19
indexGfx = mapDisp(tabe, tabd).Ind
posxx = posX + (countX * tabe) - (countX * tabd)
posyy = posY + (countY * tabe) + (countY * tabd)
If posxx >= -59 And posxx <= 708 And posyy >= -90 And _
posyy <= 600 Then
If indexGfx = 0 Then
pic1 = LoadPicture(App.Path & "\" & "msk_test.gif")
Display.PaintPicture wiesem.Picture, posxx, posyy, _
zoomx1, zoomy1, , , , , vbMergePaint
Display.PaintPicture pic1.Picture, posxx, posyy, _
zoomx1, zoomy1, , , , , vbSrcAnd
Else
If Tabelle.RecordCount > 0 And Not Tabelle.BOF Then _
Tabelle.MoveFirst
gfxZahl = Tabelle.RecordCount
Tabelle.Index = "IndexA"
Tabelle.Seek "=", indexGfx
If Not Tabelle.NoMatch Then
pic1 = LoadPicture(gfxpfad & "\terrain\" & Tabelle( _
"Pfad"))
Display.PaintPicture wiesem.Picture, posxx, posyy, _
zoomx1, zoomy1, , , , , vbMergePaint
Display.PaintPicture pic1.Picture, posxx, posyy, _
zoomx1, zoomy1, , , , , vbSrcAnd
Else
'kein Datensatz vorhanden
MsgBox "Die Grafik mit dem Index (" & indexGfx & ")" & _
"existiert nicht in der Datenbank", vbCritical, _
"Fehler"
Tabelle.Close
Db.Close
Set Tabelle = Nothing
Set Db = Nothing
End
End If
End If
End If
Next tabe
Next tabd
'raster darstellen
If raster = True Then
rasx1 = 766
rasx2 = 884
rasx3 = 59
rasy1 = 0
rasy2 = 30
ras3 = 765 / abstandxx1 * 4
For rasterX = 1 To ras3
Display.Line (rasx1, 0)-(766, rasy1)
Display.Line (0, rasy2)-(rasx3, 0)
rasx1 = rasx1 - abstandxx1
rasx2 = rasx2 - abstandxx1
rasy1 = rasy1 + 60 - (60 / 100 * Abs(zoomz))
rasy2 = rasy2 + 60 - (60 / 100 * Abs(zoomz))
rasx3 = rasx3 + abstandxx1
Next rasterX
End If
MsgBar Me, ""
End Sub |