现在开始创建一个窗口,首先创建一个文件夹,比如文件夹名称为g3d,并使用vscode打开,打开vscode的终端(左下角):

在终端输入:go mod init g3d 初始化一下,然后将我们下载的SDL2-2.0.22-win32-x64.zip压缩包内的SDL2.dll解压放到我们创建的g3d文件夹内即可,至此初始化项目完成。

01.创建文件夹engine,并在文件夹内创建game文件夹,创建一个game.go文件,并创建一个main.go文件,具体如下图:

各个文件的代码如下:

game.go:

package engine

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

type Game struct {
	MWindow    *SDL.Window
	MRenderer  *SDL.Renderer
	MIsRunning bool
}

//初始化引擎
func (g *Game) Initialize() bool {
	var err error
	//初始化SDL
	if err = SDL.Init(SDL.INIT_VIDEO); err != nil {
		SDL.Log("Unable to initialize SDL: %s", SDL.GetError())
		return false
	}
	//创建窗口
	if g.MWindow, err = SDL.CreateWindow(
		"golang游戏引擎(创建一个窗口)",
		100,
		100,
		1024,
		768,
		0,
	); err != nil {
		SDL.Log("Failed to create window: %s", SDL.GetError())
		return false
	}
	//创建渲染
	if g.MRenderer, err = SDL.CreateRenderer(
		g.MWindow,
		-1,
		SDL.RENDERER_ACCELERATED|SDL.RENDERER_PRESENTVSYNC,
	); err != nil {
		SDL.Log("Failed to create renderer: %s", SDL.GetError())
		return false
	}

	//保持运行
	g.MIsRunning = true
	return true
}

//引擎循环
func (g *Game) RunLoop() {
	for {
		g.ProcessInput()
		g.UpdateGame()
		g.GenerateOutput()

		if !g.MIsRunning {
			break
		}
	}
}

func (g *Game) ProcessInput() {
	var event SDL.Event
	for {
		if event = SDL.PollEvent(); event == nil {
			break
		} else {
			switch event.GetType() {
			case SDL.QUIT: //窗口关闭退出
				g.MIsRunning = false
			}
		}
	}

	//获取所有按键状态
	state := SDL.GetKeyboardState()
	//按下ESC退出
	if state[SDL.SCANCODE_ESCAPE] == 1 {
		g.MIsRunning = false
	}

}

func (g *Game) UpdateGame() {

}

func (g *Game) GenerateOutput() {
	//背景颜色
	g.MRenderer.SetDrawColor(
		0,   // R
		0,   // G
		255, // B
		255, // A
	)
	g.MRenderer.Clear()   //清屏
	g.MRenderer.Present() //交换缓冲区

}

//引擎销毁
func (g *Game) Shutdown() {
	g.MRenderer.Destroy()
	g.MWindow.Destroy()
	SDL.Quit()
}

 main.go:

package main

import engine "g3d/engine/game"

func main() {
	var game engine.Game
	if game.Initialize(){
		game.RunLoop()
	}
	game.Shutdown()
}

代码输入完成之后在终端输入:go mod tidy 来安装依赖(golang记得配置代理,否则可能下载不成功),然后输入go run . 来运行我们即可得到一个蓝色的窗口: