golang游戏开发与视频编程学习插件库raylib-goraylib的使用
Golang游戏开发与视频编程学习插件库raylib-go/raylib的使用
raylib-go是raylib的Golang绑定,raylib是一个简单易用的库,用于享受视频游戏编程的乐趣。
要求
Ubuntu
apt-get install libgl1-mesa-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev libwayland-dev libxkbcommon-dev
Fedora
dnf install mesa-libGL-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel wayland-devel libxkbcommon-devel
macOS
在macOS上,你需要Xcode或Xcode的命令行工具(如果你安装了brew,你已经有了这个)。
Windows
cgo
在Windows上你需要C编译器,比如Mingw-w64或TDM-GCC。你也可以在MSYS2 shell中构建二进制文件。
要移除控制台窗口,使用-ldflags "-H=windowsgui"
构建。
purego (without cgo, i.e. CGO_ENABLED=0)
从发布页面下载raylib.dll。它包含在raylib-*_win64_msvc*.zip
中。将raylib.dll放入项目的根目录或复制到C:\Windows\System32
进行系统级安装。
Android
Wasm
对于web绑定,参考Raylib-Go-Wasm;它应该与此存储库基本兼容。
安装
go get -v -u github.com/gen2brain/raylib-go/raylib
构建标签
drm
- 为Linux原生DRM模式构建,包括Raspberry Pi 4和其他设备(PLATFORM_DRM)sdl
- 为SDL后端构建(PLATFORM_DESKTOP_SDL)sdl3
- 为SDL3后端构建(PLATFORM_DESKTOP_SDL3)rgfw
- 为RGFW后端构建(PLATFORM_DESKTOP_RGFW)noaudio
- 禁用音频功能opengl43
- 使用OpenGL 4.3后端opengl21
- 使用OpenGL 2.1后端(桌面默认是3.3)opengl11
- 使用OpenGL 1.1后端(伪OpenGL 1.1风格)es2
- 使用OpenGL ES 2.0后端(可用于链接Google的ANGLE)es3
- 实验性支持OpenGL ES 3.0x11
- 在Wayland上强制X11兼容模式(PLATFORM_DESKTOP/GLFW)wayland
- 强制仅Wayland模式(PLATFORM_DESKTOP/GLFW)
文档
文档在GoDoc上。同时查看raylibcheatsheet。如果你有问题或需要帮助,Raylib Discord Server的#raylib-go频道中有一个活跃的社区可以提供帮助。
示例
package main
import rl "github.com/gen2brain/raylib-go/raylib"
func main() {
// 初始化800x450的窗口
rl.InitWindow(800, 450, "raylib [core] example - basic window")
defer rl.CloseWindow() // 确保程序结束时关闭窗口
// 设置目标FPS为60
rl.SetTargetFPS(60)
// 主游戏循环
for !rl.WindowShouldClose() {
// 开始绘制
rl.BeginDrawing()
// 清除背景为白色
rl.ClearBackground(rl.RayWhite)
// 在(190,200)位置绘制灰色文本
rl.DrawText("Congrats! You created your first window!", 190, 200, 20, rl.LightGray)
// 结束绘制
rl.EndDrawing()
}
}
查看更多按raylib模块组织的示例。
交叉编译(Linux)
为Windows交叉编译
安装MinGW工具链。
$ CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w"
$ file basic_window.exe
basic_window.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 11 sections
$ CGO_ENABLED=1 CC=i686-w64-mingw32-gcc GOOS=windows GOARCH=386 go build -ldflags "-s -w"
$ file basic_window.exe
basic_window.exe: PE32 executable (console) Intel 80386 (stripped to external PDB), for MS Windows, 9 sections
为macOS交叉编译
安装OSXCross工具链。
$ CGO_ENABLED=1 CC=x86_64-apple-darwin21.1-clang GOOS=darwin GOARCH=amd64 go build -ldflags "-linkmode external -s -w '-extldflags=-mmacosx-version-min=10.15'"
$ file basic_window
basic_window: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL>
$ CGO_ENABLED=1 CC=aarch64-apple-darwin21.1-clang GOOS=darwin GOARCH=arm64 go build -ldflags "-linkmode external -s -w '-extldflags=-mmacosx-version-min=12.0.0'"
$ file basic_window
basic_window: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
许可证
raylib-go采用未修改的zlib/libpng许可证。查看LICENSE。
更多关于golang游戏开发与视频编程学习插件库raylib-goraylib的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang游戏开发与视频编程学习插件库raylib-goraylib的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用raylib-go进行Golang游戏开发与视频编程
raylib是一个简单易用的跨平台游戏开发库,而raylib-go是其Golang绑定版本。它非常适合初学者学习游戏开发,也足够强大用于创建专业项目。下面我将介绍raylib-go的基本使用方法和一些核心功能。
安装raylib-go
首先安装raylib-go库:
go get github.com/gen2brain/raylib-go/raylib
基本框架
一个最简单的raylib-go程序框架如下:
package main
import rl "github.com/gen2brain/raylib-go/raylib"
func main() {
// 初始化窗口
rl.InitWindow(800, 450, "raylib-go 示例")
defer rl.CloseWindow() // 确保程序结束时关闭窗口
// 设置目标FPS
rl.SetTargetFPS(60)
// 主游戏循环
for !rl.WindowShouldClose() {
// 开始绘制
rl.BeginDrawing()
// 清空背景
rl.ClearBackground(rl.RayWhite)
// 绘制文字
rl.DrawText("Hello, raylib-go!", 190, 200, 20, rl.DarkGray)
// 结束绘制
rl.EndDrawing()
}
}
核心功能示例
1. 绘制图形
// 在游戏循环中添加这些绘制调用
rl.DrawCircle(100, 100, 50, rl.Red) // 圆形
rl.DrawRectangle(200, 100, 100, 50, rl.Blue) // 矩形
rl.DrawTriangle(
rl.NewVector2(400, 100),
rl.NewVector2(350, 150),
rl.NewVector2(450, 150),
rl.Green) // 三角形
2. 处理输入
// 在游戏循环中检测输入
if rl.IsKeyDown(rl.KeySpace) {
rl.DrawText("SPACE按下中", 300, 300, 20, rl.Black)
}
mousePos := rl.GetMousePosition()
rl.DrawText(fmt.Sprintf("鼠标位置: %.0f, %.0f", mousePos.X, mousePos.Y), 10, 10, 20, rl.Black)
3. 2D精灵和纹理
// 在main函数开始处加载纹理
texture := rl.LoadTexture("assets/character.png")
defer rl.UnloadTexture(texture) // 记得卸载
// 在游戏循环中绘制纹理
rl.DrawTexture(texture, 300, 200, rl.White)
4. 简单的2D游戏示例
package main
import (
rl "github.com/gen2brain/raylib-go/raylib"
)
func main() {
rl.InitWindow(800, 450, "简单2D游戏")
defer rl.CloseWindow()
player := struct {
x, y float32
size float32
speed float32
}{
x: 400, y: 225, size: 20, speed: 5,
}
score := 0
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
// 输入处理
if rl.IsKeyDown(rl.KeyRight) { player.x += player.speed }
if rl.IsKeyDown(rl.KeyLeft) { player.x -= player.speed }
if rl.IsKeyDown(rl.KeyUp) { player.y -= player.speed }
if rl.IsKeyDown(rl.KeyDown) { player.y += player.speed }
// 简单的碰撞检测
if player.x < 0 { player.x = 0 }
if player.x > 800 { player.x = 800 }
if player.y < 0 { player.y = 0 }
if player.y > 450 { player.y = 450 }
// 每帧增加分数
score++
// 绘制
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
// 绘制玩家
rl.DrawCircle(int32(player.x), int32(player.y), player.size, rl.Red)
// 绘制分数
rl.DrawText(rl.TextFormat("分数: %d", score), 10, 10, 20, rl.Black)
rl.EndDrawing()
}
}
5. 3D基础
raylib也支持3D渲染:
// 初始化3D相机
camera := rl.Camera3D{}
camera.Position = rl.NewVector3(10.0, 10.0, 10.0)
camera.Target = rl.NewVector3(0.0, 0.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
// 在游戏循环中
rl.BeginMode3D(camera)
rl.DrawCube(rl.NewVector3(0.0, 0.0, 0.0), 2.0, 2.0, 2.0, rl.Red)
rl.DrawGrid(10, 1.0)
rl.EndMode3D()
视频处理
raylib也可以用于简单的视频处理:
// 加载视频
video := rl.LoadVideoStream("assets/video.mp4")
defer rl.UnloadVideoStream(video)
rl.PlayVideoStream(video)
// 在游戏循环中
if rl.IsVideoStreamPlaying(video) {
texture := rl.GetVideoTexture(video)
rl.DrawTexture(texture, 0, 0, rl.White)
}
音频处理
// 加载音效
sound := rl.LoadSound("assets/sound.wav")
defer rl.UnloadSound(sound)
// 播放音效
if rl.IsKeyPressed(rl.KeyP) {
rl.PlaySound(sound)
}
资源管理最佳实践
- 在程序开始时加载所有资源
- 使用defer确保资源被正确释放
- 对于大型游戏,考虑资源按需加载和卸载
总结
raylib-go为Golang提供了完整的游戏开发功能,包括:
- 2D/3D图形渲染
- 输入处理
- 音频播放
- 简单的视频处理
- 物理模拟(通过外部扩展)
它的API设计简洁直观,非常适合学习游戏开发基础,也可以用于创建实际项目。通过组合这些基本功能,你可以构建各种类型的游戏和多媒体应用程序。