Go SDL2 游戏开发入门4-优化 surface
前言
现在我们已经可以在窗口里展示我们的图片了
由于图片的数量不多, 所以我们感觉不到渲染的速度, 但当你真正开发一款游戏的时候, 你会发现渲染未经处理的原图会使程序运行变得很慢
所以我们需要进行优化, 加速程序的运行
原理
大部分的位图都是24位的, 所以我们加载图片的时候, 都是以24位的格式进行加载
但是现在市面上的显示器有可能不是24位的, 所以当你每次渲染图片的时候, 都要将它的格式转换成显示器的格式
于是, 我们可以在创建 surface 的时候, 将其转换好, 这样就不用每次都转换了
代码
直接使用我们第2节的代码, 修改几行如下
package main import ( "github.com/veandco/go-sdl2/img" "github.com/veandco/go-sdl2/sdl" ) func main() { sdl.Init(sdl.INIT_EVERYTHING) defer sdl.Quit() window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, 670, 620, sdl.WINDOW_SHOWN) defer window.Destroy() surface, _ := window.GetSurface() defer surface.Free() surface.FillRect(nil, sdl.MapRGB(surface.Format, 0x0, 0x0, 0x0)) //这里是关键的修改地方 pngImage, _ := img.Load("../asserts/image/texture.png") optimizedImage, _ := pngImage.Convert(surface.Format, 0) defer optimizedImage.free() pngImage.Free() optimizedImage.Blit(nil, surface, nil) window.UpdateSurface() running := true for running { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: println("Quit") running = false break break } } sdl.Delay(16) } }
- 如前, pngImage 为原始 surface
- pngImage.Convert 为转换函数, 第一个参数即为窗口 surface 的格式, 第二个参数为 0
- 转换之后需要将原始 surface 的内存释放掉, 之后直接使用 optimizedImage 就好了
- 其他的代码不变