前言

SDL2 可以在渲染器 renderer 上直接画几何图, 下面我们就来试试吧, 很简单

代码

package main

import (
    "github.com/veandco/go-sdl2/sdl"
)

const (
    W = 670
    H = 620
)

func main() {
    sdl.Init(sdl.INIT_EVERYTHING)
    defer sdl.Quit()

    window, _ := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED,
        W, H, sdl.WINDOW_SHOWN)
    defer window.Destroy()

    renderer, _ := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED)
    defer renderer.Destroy()

    running := true
    for running {
        for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
            switch event.(type) {
            case *sdl.QuitEvent:
                println("Quit")
                running = false
                break
            }
        }
        renderer.SetDrawColor(128, 128, 128, 255)
        renderer.Clear()

        rect := sdl.Rect{W / 4, H / 4, W / 2, H / 2}
        renderer.SetDrawColor(255, 0, 0, 255)
        renderer.FillRect(&rect)

        outline := sdl.Rect{W / 6, H / 6, W * 2 / 3, H * 2 / 3}
        renderer.SetDrawColor(0, 255, 0, 255)
        renderer.DrawRect(&outline)

        renderer.SetDrawColor(0, 0, 255, 255)
        renderer.DrawLine(0, H/2, W, H/2)

        renderer.SetDrawColor(255, 255, 0, 255)
        for i := 0; i < H; i += 4 {
            renderer.DrawPoint(W/2, int32(i))
        }

        renderer.Present()
        sdl.Delay(16)
    }
}
  1. 和之前一样, 还是先创建一个窗口, 在窗口上创建一个渲染器
  2. 然后在主循环里, 直接调用 renderer 下的方法来画几何图
  3. 首先renderer.SetDrawColor(128, 128, 128, 255) 设置一下背景颜色
  4. renderer.Clear() 会把渲染器刷成上一次设置的颜色
  5. 创建一个矩形 sdl.Rect{W / 4, H / 4, W / 2, H / 2}, 4 个参数分别是坐标 x,y 和长宽 w,h
  6. 设置一下颜色, 然后 renderer.FillRect 把矩形填充到渲染器上
  7. 再创建一个矩形 sdl.Rect{W / 6, H / 6, W * 2 / 3, H * 2 / 3}
  8. 设置颜色, 然后 renderer.DrawRect 把矩形画到渲染器上, 这个和上面的区别就是只会划线不会填充
  9. renderer.DrawLine 就是直接画一条线, 4 个参数分别是起点和终点的坐标
  10. renderer.DrawPoint 及时直接画一个点, 2 个参数就是点的坐标
  11. 最后 renderer.Present 显示出来就好了, 是不是很简单 (^o^)/~

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