首先下载SDL_images(下载地址):
需要下载两个文件,分别是SDL2_image-2.6.0-win32-x64.zip和SDL2_image-devel-2.6.0-mingw.zip,并解压SDL2_image-2.6.0-win32-x64.zip文件中的SDL2_image.dll到g3d目录,然后解压SDL2_image-devel-2.6.0-mingw.zip到D:\mingw64\x86_64-w64-mingw32,如下图:
用到的图片:
game.go:
package engine
import (
IMG "github.com/veandco/go-sdl2/img"
SDL "github.com/veandco/go-sdl2/sdl"
)
type Game struct {
MWindow *SDL.Window
MRenderer *SDL.Renderer
MIsRunning bool
MTicksCount uint32
}
var backImg *SDL.Texture
//初始化引擎
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
}
//载入图片
backImg = g.LoadTexture("./assets/Farback01.png")
//保持运行
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()
//画图
r := &SDL.Rect{
X: 0,
Y: 0,
W: 1024,
H: 768,
}
g.MRenderer.Copy(backImg, r, r)
//交换缓冲区
g.MRenderer.Present()
}
//引擎销毁
func (g *Game) Shutdown() {
IMG.Quit()
g.MRenderer.Destroy()
g.MWindow.Destroy()
SDL.Quit()
}
//载入图片
func (g *Game) LoadTexture(file string) (text *SDL.Texture) {
if surf, err := IMG.Load(file); err != nil {
SDL.Log("Failed to load texture file: %s", file)
} else {
text, err = g.MRenderer.CreateTextureFromSurface(surf)
surf.Free()
if err != nil {
SDL.Log("Failed to convert surface to texture for: %s", file)
}
}
return
}
显示结果: