Performanceproblem
Verfasst: 30.04.2006 19:35
Hallo,
ich bin PureBasic-Anfänger, hab vorher mit Visual Basic 6.0 gearbeitet.
Ich bin grad einfach ein bischen am rumspielen um mich in PB (4.00 Beta 11) einzuarbeiten.
Nun habe ich eine Prozedur geschrieben, die mir ein Gitter aus hexagonalen Feldern zeichnet. Aber irgendwie erscheint mir die Prozedur sehr langsam, bei meinem Athlon 3200 läuft die Prozedur in einer Schleife grade mal 50 mal pro Sekunde durch. Also nicht das ich es wirklich schneller bräuchte, aber gerade als Anfänger würde es mich schon interessieren wie ich diese Prozedur optimieren kann.
So, hier der Code:
ich bin PureBasic-Anfänger, hab vorher mit Visual Basic 6.0 gearbeitet.
Ich bin grad einfach ein bischen am rumspielen um mich in PB (4.00 Beta 11) einzuarbeiten.
Nun habe ich eine Prozedur geschrieben, die mir ein Gitter aus hexagonalen Feldern zeichnet. Aber irgendwie erscheint mir die Prozedur sehr langsam, bei meinem Athlon 3200 läuft die Prozedur in einer Schleife grade mal 50 mal pro Sekunde durch. Also nicht das ich es wirklich schneller bräuchte, aber gerade als Anfänger würde es mich schon interessieren wie ich diese Prozedur optimieren kann.
So, hier der Code:
Code: Alles auswählen
Procedure DrawHexGrid(ImageID.l, PositionX.l, PositionY.l, Cols.l, Raws.l, HexSize.l)
Define.l r,d,dr,rh,nrh,drhmr,Raw,Col,ImgID_GridDraw,FColor
Raws = Raws / 2
Cols = Cols / 2
d = HexSize
r = Round(d / 2, 1)
rh = Round(r / 2, 1)
nrh = -1 * rh
dr = d + r
drhmr = d + rh - r
FColor = RGB(255,255,255)
ImgID_GridDraw = FreeImageID
FreeImageID = FreeImageID + 1
CreateImage(ImgID_GridDraw, (HexSize * Cols) + (r * Cols) + rh + 1, HexSize * Raws + r + 1)
StartDrawing(ImageOutput(ImgID_GridDraw))
FrontColor(FColor)
For Col = 0 To Cols
For Raw = 0 To Raws
Line(Col * dr - r, Raw * d, nrh, r)
Line(Col * dr - r, Raw * d, r, 0)
Line(Col * dr, Raw * d, rh, r)
Line(Col * dr + rh, Raw * d + r, r, 0)
Line(Col * dr + rh, Raw * d + r, nrh, r)
Line(Col * dr + drhmr, Raw * d + r, rh, r)
Next
Next
For Raw = 0 To Raws
FillArea(0, Raw * d + r, FColor)
FillArea(Cols * dr + rh, Raw * d, FColor)
Next
For Col = 0 To Cols
FillArea(Col * dr + r, 0, FColor)
FillArea(Col * dr - r, Raws * d + 1, FColor)
Next
StopDrawing()
StartDrawing(ImageOutput(ImageID))
DrawImage(ImageID(ImgID_GridDraw), PositionX, PositionY)
StopDrawing()
FreeImage(ImgID_GridDraw)
FreeImageID = FreeImageID - 1
EndProcedure