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)

大家都在看

  • [原创]Golang一行代码给钉钉群推送消息

    [原创]Golang一行代码给钉钉群推送消息 钉钉本来就是工具,只是boss把你变成了工具. — 麦·卡隆 今天朋友扔给我个某签到脚本,让我做推送功能. 我迅速从吃灰收藏夹里掏出S…

    Go语言 2023年5月25日
    041
  • 听说,99% 的 Go 程序员都被 defer 坑过

    先声明:我被坑过。 出问题就对了,这个小东西坏的很,一不留神就出错。 所以,面对这种情况,我们今天就不讲道理了。直接把我珍藏多年的代码一把梭,凭借多年踩坑经历和写 BUG 经验,我…

    Go语言 2023年5月25日
    066
  • Go语言:包管理基础知识

    起因是,遇到一个问题: 经查阅资料,很可能跟包管理有关,之前有了解过忘了就再学一遍顺便解决问题。 学习资料: GO111MODULE 是个啥? – 知乎 (zhihu….

    Go语言 2023年5月25日
    055
  • golang 实现一个简单的命令行进度条

    由于有时候跑脚本几个小时看不到进度,所以想着写一个简单的命令行的进度条。类似下面这样的 其中的原理主要是\r回车符(将光标移动到行首)。这样的话就可以重新打印一行以覆盖之前的那一行…

    Go语言 2023年5月25日
    045
  • websocket:二.Golang实现Websocket消息通知

    我们在设计产品的时候通常都会遇到消息通知的时候,比如用户下单支付成功,比如用户有站内信来可以实时通知。而http是单向的,客户端请求,服务端返回,这次请求就已经结束。而websoc…

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

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

    Go语言 2023年5月25日
    049
  • Go汇编语法和MatrixOne使用介绍

    目录 MatrixOne数据库是什么? Go汇编介绍 为什么使用Go汇编? 为什么不用CGO? Go汇编语法特点 操作数顺序 寄存器宽度标识 函数调用约定 对写Go汇编代码有帮助的…

    Go语言 2023年5月25日
    081
  • Go easyjson使用技巧

    原文链接:http://www.zhoubotong.site/post/37.html 如果使用go语言自带的json库,使用的是反射,而go语言中反射性能较低。easyjson…

    Go语言 2023年5月25日
    055
  • Go 学习路线(2022)

    原文链接: Go 学习路线(2022) Go 语言的发展越来越好了,很多大厂使用 Go 作为主要开发语言,也有很多人开始学习 Go,准备转 Go 开发。 那么,怎么学呢? 我发现,…

    Go语言 2023年5月25日
    047
  • 写了一年golang,来聊聊进程、线程与协程

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 进程 在早期的单任务计算机中,用户一次只能提交一个作业,独享系统的全部资源…

    Go语言 2023年5月25日
    074
  • sqlx操作MySQL实战及其ORM原理

    sqlx是Golang中的一个知名三方库,其为Go标准库database/sql提供了一组扩展支持。使用它可以方便的在数据行与Golang的结构体、映射和切片之间进行转换,从这个角…

    Go语言 2023年5月25日
    063
  • 使用go语言遇到的一些问题记录

    一、参数校验问题 使用go做web服务时,经常需要对请求参数进行校验,有些必填参数需要校验是否为空。 经常会遇到参数a为int类型,但是其值取值范围为0-xxx。0也是有意义的。 …

    Go语言 2023年5月29日
    059
  • Golang:将日志以Json格式输出到Kafka

    工程实践中,我们往往还需要对日志进行采集,将日志归集到一起,然后用于各种处理分析,比如生产环境上的错误分析、异常告警等等。在日志消息系统领域,Kafka久负盛名,这篇文章就以将日志…

    Go语言 2023年5月25日
    070
  • go学习笔记(一)

    零值的 slice等于 nil。 nil值的 slice没有底层数组 nil值的 slice的长度和容量都是 0。但是也有非 nil值的 slice的长度和容量为 0的,如 []i…

    Go语言 2023年5月25日
    029
  • 将百度万年历存入自己的数据库

    前言 最近有需要研究阴历和阳历互相转换的问题。因此找到两个库carbon和solarlunar但是感觉计算出来的总是不太放心,而且也会占用计算资源。我的想法是通过接口获取现成的阴历…

    Go语言 2023年5月25日
    057
  • 举个栗子之gorpc – 消息的编码和解码

    2022年的第一个rpc,比以往来的更早一些… 留杭过年…写点东西 初始化项目gorpc 借助go module我们可以轻易创建一个新的项目 mkdir g…

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