Go SDL2 游戏开发入门1-简介 第一个窗口
前言
一直以来 Go 语言都是作为服务器开发的优势语言, 但我一直想用 Go 来做游戏客户端, 市面上也没有特别好的引擎, 然后就像自己玩玩
我还是选择最纯粹的 SDL 库, 一来没有那么多依赖, 二来可以自己学习游戏引擎的技术
阅读此文章的各位小伙伴们, 我会默认你熟悉 Go 语言, 如果你没接触过 Go, 或者对 Go 没有足够的兴趣, 那么我不建议你看这篇教程, 因为市面上有大把的游戏引擎可供选择, 真的没必要看这篇
安装
https://github.com/veandco/go-sdl2, 安装教程见 readme
创建一个窗口
package main import ( "github.com/veandco/go-sdl2/sdl" ) func main() { if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { panic(err) } defer sdl.Quit() window, err := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, 670, 620, sdl.WINDOW_SHOWN) if err != nil { panic(err) } defer window.Destroy() surface, err := window.GetSurface() if err != nil { panic(err) } surface.FillRect(nil, sdl.MapRGB(surface.Format, 0xff, 0xff, 0xff)) 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 } } sdl.Delay(16) } }
- sdl.Init() 见字识意, 初始化的意思, INIT_EVERYTHING 表示将一些图形, 音频等子系统都初始化一遍
- sdl.Quit() 退出时的内存清扫
- sdl.CreateWindow() 创建一个窗口, 窗口名字 test, 第2,3两个参数是窗口坐标, 第4,5两个参数是窗口大小, 第6个参数是窗口的属性, 比如全屏啊, 隐藏啊什么的
- window.Destroy() 退出时销毁窗口
- 有了窗口还不行, 还需要获取窗口的 surface 才能在上面 draw 我们想要的东西, window.GetSurface() 就是获取 surface
- surface.FillRect() 为 surface 填充上我们想要的颜色, 第1个参数可以先设置为 nil, 第二个参数是个颜色值
- sdl.MapRGB() 根据给定的 format 和 RGB 值返回一个 int 型的颜色值, format 到底指什么意思我还没弄清, 但目前不影响, 先放着
- draw 完了, 我们还需要刷新 surface 才能看到结果, window.UpdateSurface() 就是这个作用
- 最下面这一段是一个 poll 监听, 监听什么时候关闭退出, 如果没有这段代码, 窗口就会瞬间打开又关闭, 看不到效果, 可以先放着不管
- 以上就是 Go SDL 创建一个窗口的全过程
使用 sdl 的一个优势是, 代码很清晰, 所有的 sdl 函数都对应了 sdl 库中 c 语言的函数, 有什么不懂的直接看源码, 解释的很清晰, 实在不懂还可以把对应的 c 代码拿到 sdl api里查
https://wiki.libsdl.org/ 这是 sdl 库文档
https://godoc.org/github.com/veandco/go-sdl2/sdl 这是 sdl go 语言文档