作为优化,我决定在全局范围内放置一个我经常需要的对象 - 具有整个关卡的预渲染图像的 SDL 表面(称为 S_AreaBMP)。
现在不必每帧都在 DrawScreen 函数中创建和销毁它。我只需要在加载新关卡或 GFX 表时处理和更改它,我通过此函数执行此操作:
Public Sub PrepareAreaImage()
''#dispose old image before it becomes unreferenced
If AreaBMPExists
S_AreaBMP.Dispose()
End If
AreaBMPExists = True
''#declare an appropriately sized bitmap w/ a GDI Graphics object
Dim AreaBMP As Bitmap = New Bitmap(Area.W * TLDIM, Area.H * TLDIM)
Dim AreaGrph As Graphics = Graphics.FromImage(AreaBMP)
''#...(omitted: iterate through Area and draw each tile to AreaBMP)
''#Store to the SDL surface
S_AreaBMP = New SdlDotNet.Graphics.Surface(AreaBMP)
''#Dispose
AreaBMP.Dispose()
AreaGrph.Dispose()
End Sub
(AreaBMPExists 和 S_AreaBMP 是全局范围)
问题:这从根本上说是合理的吗?
效果很好,但是我不禁觉得这种事情是不鼓励的......