Golang游戏引擎日记(04.显示一张图片)

首先下载SDL_images(下载地址):

需要下载两个文件,分别是SDL2_image-2.6.0-win32-x64.zipSDL2_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.zipD:\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
}

 显示结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值