前言

一直以来 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)
    }
}
  1. sdl.Init() 见字识意, 初始化的意思, INIT_EVERYTHING 表示将一些图形, 音频等子系统都初始化一遍
  2. sdl.Quit() 退出时的内存清扫
  3. sdl.CreateWindow() 创建一个窗口, 窗口名字 test, 第2,3两个参数是窗口坐标, 第4,5两个参数是窗口大小, 第6个参数是窗口的属性, 比如全屏啊, 隐藏啊什么的
  4. window.Destroy() 退出时销毁窗口
  5. 有了窗口还不行, 还需要获取窗口的 surface 才能在上面 draw 我们想要的东西, window.GetSurface() 就是获取 surface
  6. surface.FillRect() 为 surface 填充上我们想要的颜色, 第1个参数可以先设置为 nil, 第二个参数是个颜色值
  7. sdl.MapRGB() 根据给定的 format 和 RGB 值返回一个 int 型的颜色值, format 到底指什么意思我还没弄清, 但目前不影响, 先放着
  8. draw 完了, 我们还需要刷新 surface 才能看到结果, window.UpdateSurface() 就是这个作用
  9. 最下面这一段是一个 poll 监听, 监听什么时候关闭退出, 如果没有这段代码, 窗口就会瞬间打开又关闭, 看不到效果, 可以先放着不管
  10. 以上就是 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 语言文档

源码 https://gitee.com/fcsvr/tank.git