Ebiten-纯Golang开发的跨平台游戏引擎

Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎

Go语言不是让你玩的啊喂!

昨天跟好基友聊开发的事,他说他等着闲下来的时候就用 PYGame写个像那个最近挺火的”文X游X”一样的游戏.(没收广告费啊!)

基友突然嘲笑我:”你家Go是不是只能玩黑底白字啊?”

这能忍吗?为了给广大Golang开发者报仇,我决定去问问度娘.

Ebiten-纯Golang开发的跨平台游戏引擎

不编故事了,我们直接进入正题…

Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎
GitHub地址:https://github.com/hajimehoshi/ebiten
开发者大大 星一 (はじめほしHajime Hoshi) 对Ebiten的介绍:

Ebiten is an open source game library for the Go programming language. Ebiten’s simple API allows you to quickly and easily develop 2D games that can be deployed across multiple platforms.
Ebiten是个用Go写的开源的游戏引擎.俺的炒鸡简单API可以让你快速码出炒鸡🐮的2D游戏,还可以整到各个平台上!

搜嘎,还是很谦虚嘛.

开始开发!

第一步 安装

Go 最低支持版本:1.13+
然后直接:

go get github.com/hajimehoshi/ebiten/v2
go run -tags=example github.com/hajimehoshi/ebiten/v2/examples/rotate

如果看到这个鬼畜图片说明安装正常:

Ebiten-纯Golang开发的跨平台游戏引擎

Windows不需要CGO,其他平台需要.

各平台详细安装步骤请康开发者的 奇怪指南

第二步 哈喽,沃德

package main

import (
    "log"

    "github.com/hajimehoshi/ebiten/v2"            //ebiten本体
    "github.com/hajimehoshi/ebiten/v2/ebitenutil" //ebiten工具集
)

type Game struct{}//Game结构体

func (g *Game) Update() error {
    return nil
}

func (g *Game) Draw(screen *ebiten.Image) {
    ebitenutil.DebugPrint(screen, "Hello, World!")//在屏幕上输出
}

func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
    return 320, 240//窗口分辨率
}

func main() {
    ebiten.SetWindowSize(640, 480)//窗口大小
    ebiten.SetWindowTitle("Hello, World!")//窗口标题
    if err := ebiten.RunGame(&Game{}); err != nil {
        log.Fatal(err)
    }
}

然后就会在屏幕右上角输出一个”Hello, World!”

Ebiten-纯Golang开发的跨平台游戏引擎

没有10年游戏开发经历的你可能会有疑问了: 这玩意叫游戏引擎?我用脚抠的也比他好.

我们不妨再加几行:

type Game struct{
    i uint8
}
func Hex2RGB(color16 string ,alpha uint8) color.RGBA  {
    r, _ := strconv.ParseInt(color16[:2], 16, 10)
    g, _ := strconv.ParseInt(color16[2:4], 16, 18)
    b, _ := strconv.ParseInt(color16[4:], 16, 10)
    return color.RGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: alpha}
}

func (g *Game) Draw(screen *ebiten.Image) {
    g.i++
    if  g.i < 255 {
        screen.Fill(Hex2RGB("#0dceda", g.i))
        else{g.i=0}
        ebitenutil.DebugPrint(screen, fmt.Sprintf("Hello,ebiten!\nTPS: %0.2f\nFPS: %0.2f", ebiten.CurrentTPS(),ebiten.CurrentFPS()))
}

效果如何呢?有没有惊艳到你呢?

解释几个名词:

FPS:游戏佬都知道,帧数帧数,玩家一生的痛!

TPS(ticks per second):每秒滴答数,说白的就是每秒执行函数的次数,锁定60.

作者推荐在Debug时看TPS,因为在某些情况下,FPS是不可靠的.

最后 Build,并扔给好基友

ebiten在build时毫无问题,非常丝滑,我也在装载win7的古董电脑上跑了一下,完全兼容.

至于做跨平台嘛…就需要研究一下啦!

Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎Ebiten-纯Golang开发的跨平台游戏引擎

这次的教程满意吗?

喜欢的话就分享给各路大神吧!

对了,ebiten作者希望有人能够参与编写和翻译他的文档,我已经向他发邮件询问了.

如果大家希望我做一个正式教程的话,请留言

2022年3月6日 14:11:53 更新 中文翻译已发布:https://ebiten-zh.vercel.app/

Original: https://www.cnblogs.com/maicarons/p/15312109.html
Author: Maicarons
Title: Ebiten-纯Golang开发的跨平台游戏引擎

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/516592/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 微服务追踪SQL(支持Isto管控下的gorm查询追踪)

    效果图 SQL的追踪正确插入到微服务的调用链之间 详细记录了SQL的执行内容和消耗时间 搜索SQL的类型 多线程(goroutine)下的追踪效果 在 Kubernetes 中部署…

    Go语言 2023年5月25日
    066
  • go 自定义http.Client – 动态修改请求Body

    在对接Alexa Smart Home时,有的请求Payload中需要传入Access Token,但是这个Token是由OAuth2 Client管理的,封装Payload时并不…

    Go语言 2023年5月25日
    056
  • 在开发中将git运用自如

    写这篇文章的初衷是记录自己在开发中使用git遇到的问题和如何利用git进行高效的开发。个人理解来看,很多人对git运用不自如主要是两方面的原因:1、死记硬背命令,这个其实可以通过h…

    Go语言 2023年5月25日
    050
  • Golang使用swaggo自动生成Restful API文档

    相信很多程序猿和我一样不喜欢写API文档。写代码多舒服,写文档不仅要花费大量的时间,有时候还不能做到面面具全。但API文档是必不可少的,相信其重要性就不用我说了,一份含糊的文档甚至…

    Go语言 2023年5月25日
    058
  • go入门项目:(1) 基于命令行的图书的增删查改

    Go 语言入门练手项目系列 01 基于命令行的图书的增删查改 02 文件管理 持续更新中… 本文来自博客园,作者:Arway,转载请注明原文链接:https://www…

    Go语言 2023年5月25日
    065
  • 为 Memcached 构建基于 Go 的 Operator 示例

    Operator SDK 中的 Go 编程语言支持可以利用 Operator SDK 中的 Go 编程语言支持,为 Memcached 构建基于 Go 的 Operator 示例、…

    Go语言 2023年5月25日
    056
  • go-micro开发RPC服务的方法及其运行原理

    go-micro是一个知名的golang微服务框架,最新版本是v4,这篇文章将介绍go-micro v4开发RPC服务的方法及其运作原理。 基本概念 go-micro有几个重要的概…

    Go语言 2023年5月25日
    059
  • gRPC,爆赞

    gRPC 这项技术真是太棒了,接口约束严格,性能还高,在 k8s 和很多微服务框架中都有应用。 作为一名程序员,学就对了。 之前用 Python 写过一些 gRPC 服务,现在准备…

    Go语言 2023年5月25日
    060
  • sync:一. 原子操作(atomic)

    原子操作是指在程序运行中不能被中断的操作,原子操作是无锁的常常是由CPU指令直接实现,而锁一般由操作系统的调度器实现,所以原子操作的效率一般更高。 golang中原子操作支持的类型…

    Go语言 2023年5月25日
    057
  • go语言面向对象编程之类型系统

    go语言类型系统 类型系统,顾名思义是指一个语言的类型体系结构,一个典型的类型系统通常包含如下基本内容 基础类型:如byte,int,bool,float等 复合类型:如数组,指针…

    Go语言 2023年5月29日
    042
  • 【Go语言】(一)环境搭建与了解VScode工具

    视频链接(p1~p8): golang入门到项目实战 [2022最新Go语言教程,没有废话,纯干货!] 参考链接: 用vscode开发go的时候,安装go包报错:connectex…

    Go语言 2023年5月25日
    072
  • Go xmas2020 学习笔记 01-14 上篇

    课程地址 go-class-slides/xmas-2020 at trunk · matt4biz/go-class-slides (github.com) 主讲老师 Matt …

    Go语言 2023年5月25日
    076
  • 【Go实战基础】数组实战,程序员的基本功

    数组实战,程序员的基本功。 实战需求: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 实战思路: 1、先声明…

    Go语言 2023年5月25日
    033
  • 10分钟go crawler colly从入门到精通

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Go语言 2023年5月25日
    057
  • go-containerregistry 实战篇之容器镜像下载

    go-containerregistry 实战篇之容器镜像下载 一、库介绍 go-containerregistry 是 google 公司开源的用于处理容器镜像的golang客户…

    Go语言 2023年5月25日
    068
  • Go语言实现并行分段求和计算

    这个实例通过循环实现并行的分段求和计算,再把各个子段和加到总和中。 通过这个实例可以了解如何实现循环并行处理,以及有关的编程技巧。 但是这个程序是有问题的,因为可能发生变量访问冲突…

    Go语言 2023年5月29日
    046
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球