前言

上一节我们创建了一个窗口, 这一节我们将在窗口上显示一张图片

显示图片

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")

    //pngImage.BlitScaled(nil, surface, &sdl.Rect{X: 0, Y: 0, W: 670, H: 620})
    pngImage.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
            }
        }
        sdl.Delay(16)
    }
}
  1. 以昨天的代码为框架, 为了代码的简洁, 去掉了判断 err 的部分, 只留下了最重要的部分, 实际开发过程中需加上 err 判断
  2. img.Load() 函数, 加载一个图片, 参数就是图片的路径, 返回的类型也是一个 surface
  3. pngImage.Blit() 将 pngImage 这个surface 放置在窗口的 surface 上面, 第1个参数和第3个参数可以先不管, 第2个参数就是你想要放置的 surface
  4. Blit 函数不会对图片进行任何处理, 如果你想缩放, 可以使用 BlitScaled, 第3个参数设置一下坐标和大小即可
  5. 调用刷新
  6. 这一节很简单, 就多加了三行代码, 添加一个图片即可

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