当前位置:首页 » 《休闲阅读》 » 正文

2021SC@SDUSC Ebiten 综述_island•的博客

15 人参与  2022年02月17日 13:08  分类 : 《休闲阅读》  评论

点击全文阅读


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函数里面启动游戏即可。

直接展示图片

比如我要显示下面的图片:

gopher.png

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

GOROOTGOPATH都是环境变量,其中GOROOT是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为GOPATH设置一个默认目录,并且在Go1.14及之后的版本中启用了Go Module模式之后,不一定非要将代码写到GOPATH目录下,所以也就不需要我们再自己配置GOPATH了,使用默认的即可。

Go开发编辑器

Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS CodeGoland。 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语言简单易学


点击全文阅读


本文链接:http://zhangshiyu.com/post/34884.html

函数  语言  展示  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1