最適化として、頻繁に必要とするオブジェクト (レベル全体のレンダリング済みイメージ (S_AreaBMP と呼ばれる) を持つ SDL サーフェス) をグローバル スコープに配置することにしました。
これで、フレームごとに 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 はグローバル スコープです)
質問:これは根本的に健全ですか?
それはうまく機能しますが、私はこの種のことが落胆しているように感じずにはいられません...