2021SC@SDUSC
Go语言的简单2D游戏库-Ebiten
链接:https://gitee.com/mirrors/ebiten
Ebiten官方API文档:https://pkg.go.dev/github.com/hajimehoshi/ebiten
目录
Go语言的简单2D游戏库-Ebiten
1、Ebiten库介绍
Ebiten特点
2、Ebiten包
3、Ebiten 功能简单展示
Ebiten在窗口显示文字
直接展示图片
指定位置展示图片
4、安装Go语言及搭建Go语言开发环境
下载地址
GOROOT和GOPATH
Go开发编辑器
5、组内分工
1、Ebiten库介绍
Ebiten是Go编程语言的开源游戏库。Ebiten的简单API允许您快速轻松地开发可跨多个平台部署的2D游戏。
●2D图形(矩阵的几何体和颜色变换、各种合成模式、屏幕外渲染、文本渲染、自动批处理、自动纹理图谱、自定义着色器)
●输入(鼠标、键盘、游戏板、触摸)
●音频(Ogg/Vorbis、MP3、WAV、PCM)
Ebiten特点
A、简单
在Ebiten中,一切都是图像:屏幕、图像文件中的数据,甚至屏幕外的项目都表示为图像对 象。大多数渲染操作包括在另一个图像上绘制一个图像。跨多个平台。
B、多平台
Ebiten游戏可以在桌面(Windows、macOS、Linux和FreeBSD)、网络浏览器(通过WebAssembly)甚至手机(Android和iOS)上运行!另外,Ebiten是在纯Go-on Windows中实现的,因此Windows开发人员不需要安装C编译器。任天堂交换机™ 也支持!
C、高性能
虽然Ebiten的绘图API非常简单,但Ebiten游戏使用GPU功能运行速度非常快。多个图像在内部集成到纹理图集中,并且在可能的情况下自动批量执行绘制操作。
D、生产准备
Ebiten已用于开发生产级游戏。其中一个例子就是贝尔斯登餐厅,一个下载次数超过1000000次的移动应用程序。
2、Ebiten包
ebiten 包ebiten提供图形和输入API来开发2D游戏。
- audio 包音频提供音频播放器。
- mp3 mp3包提供mp3解码器。
- vorbis vorbis包提供Ogg/vorbis解码器。
- wav wav包提供wav(RIFF)解码器
- ebitenutil 包ebitenutil为Ebiten提供实用功能。
- inpututil 包inpututil提供键盘或鼠标等实用输入功能。
- mobile 包mobile为移动平台(Android和iOS)提供功能。
- text 包text提供在Ebiten图像上绘制文本的功能。
ebiten:
internal包 部分展示
audio:
ebitenutil:
inpututil:
mobile :
text:
3、Ebiten 功能简单展示
Ebiten在窗口显示文字
package main
import (
"fmt"
"log"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
)
/*
空结构体,实现了ebiten.Game接口。
*/
type Game struct{}
/*
Update()是一个成员函数,自动调用
因为这是一个游戏开发的库,界面是需要实时更新的
因此每一个周期,都会更新一次,也就是调用一次Update函数
更新周期是1/60秒,也就是一秒会更新60次
*/
func (g *Game) Update() error {
return nil
}
/*
Draw()用于渲染界面,也是个会自动调用的函数
这个函数的自动调用频率和你电脑显示器的刷新频率一样
screen表示GUI窗口显示的对象,这里是在该窗口输出"Hello, World!"
*/
func (g *Game) Draw(screen *ebiten.Image) {
ebitenutil.DebugPrint(screen, "Hello, World!")
}
/*
Layout()函数的返回值表示显示窗口里面逻辑上屏幕的大小
官网上说参数outsideWidth和outsideHeight是显示在桌面的窗口大小
这里是固定大小640*480
*/
func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
return 640, 480
}
func main() {
// 设置窗口大小是640*480
ebiten.SetWindowSize(640, 480)
// 设置窗口头部,显示Hello, World
ebiten.SetWindowTitle("Hello, World!")
// 运行游戏
if err := ebiten.RunGame(&Game{}); err != nil {
log.Fatal(err)
}
}
显示效果如下图:
上述代码注释部分写了各个函数的作用,使用Ebiten时,格式都是一样的,都是需要创建Game
结构体、Update()
函数、Draw()
函数、Layout()
函数,然后在main
函数里面启动游戏即可。
直接展示图片
比如我要显示下面的图片:
func (g *Game) Draw(screen *ebiten.Image) {
// 1. 读取图片文件
f, err := os.Open("gopher.png")
if err != nil {
log.Fatal(err)
}
img, err := png.Decode(f)
if err != nil {
log.Fatal(err)
}
// 把Image文件转成ebiten.Image文件,用于展示
eImg := ebiten.NewImageFromImage(img)
// 在屏幕上展示出图片
screen.DrawImage(eImg, nil)
}
显示效果如下图:
指定位置展示图片
比如我一个图片要放在屏幕的某个位置,怎样指定坐标呢?还是使用DrawImage()
函数
func (i *Image) DrawImage(img *Image, options *DrawImageOptions) error
但是此时需要指定第二个参数,比如我要把图片显示在窗口的(100,100)坐标处:
func (g *Game) Draw(screen *ebiten.Image) {
// 1. 读取图片文件
f, err := os.Open("gopher.png")
if err != nil {
log.Fatal(err)
}
img, err := png.Decode(f)
if err != nil {
log.Fatal(err)
}
// 把Image文件转成ebiten.Image文件,用于展示
eImg := ebiten.NewImageFromImage(img)
op := &ebiten.DrawImageOptions{}
op.GeoM.Translate(float64(100), float64(100))
// 在屏幕上展示出图片
screen.DrawImage(eImg, op)
}
显示效果:
4、安装Go语言及搭建Go语言开发环境
下载地址
Go官网下载地址:https://golang.org/dl/
Go官方镜像站(推荐):Downloads - The Go Programming Language
GOROOT和GOPATH
GOROOT和GOPATH
都是环境变量,其中GOROOT
是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为GOPATH
设置一个默认目录,并且在Go1.14及之后的版本中启用了Go Module模式之后,不一定非要将代码写到GOPATH目录下,所以也就不需要我们再自己配置GOPATH了,使用默认的即可。
Go开发编辑器
Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS Code
和Goland
。 VS Code
是微软开源的编辑器,而Goland
是jetbrains出品的付费IDE。我们这里使用VS Code
加插件做为go语言的开发工具。
VS Code
官方下载地址:Download Visual Studio Code - Mac, Linux, Windows
5、组内分工
刘----2D图形(矩阵的颜色变换、屏幕外渲染、自动批处理、自定义着色器)
王----2D图形(矩形的几何体、各种合成模式、文本渲染、自动纹理图谱)
李----输入(鼠标、键盘、游戏板、触摸) 商----音频(Ogg/Vorbis、MP3、WAV、PCM)
结语:why go?
Go语言——让你用写Python代码的开发效率编写C语言代码 Go语言为并发而生 Go性能强悍 Go语言简单易学