使用 raylib 进行游戏开发

引入

背景

作者是蒟蒻,最近在开发3D游戏,见洛谷上似乎并没有关于 raylib 的文章,作此篇。

你是否有以下苦恼

  • 想做游戏却只会写黑框框
  • 游戏引擎过于复杂搞不懂?
  • 算法可视化并不能可视化

你不必担心,用 raylib !
raylib

raylib 是什么?

"raylib是一个简单易用的库,可以享受视频游戏编程的乐趣。" —— 官网

开始!

前置知识

本文讲解必要的知识。了解更多,小熊猫C++作者的raylib绘图库简介

相关函数

  • SetConfigFlags(FLAG_MSAA_4X_HINT);启用反锯齿

  • InitWindow(w,h,s);初始化窗口为宽 \(w\) ,高 \(h\),标题为字符串 \(s\)

  • SetTargetFPS(f);将最大帧率设置为 \(f\)

  • DisableCursor();隐藏光标(防止你在打游戏时光标乱跑。

  • BeginDrawing();EndDrawing();中间夹你要画的东西

  • BeginMode3D(camera);EndMode3D();以相机 \(camera\) 视角绘制3D模型。

  • IsKeyDown(k) \(k\) 键是否被按下。 \(k\) 一般都是 KEY_ + 按键名(大写),如KEY_W

  • DrawCube(Vector3{x,y,z},a,b,c,cor);绘制一个坐标在 \((x,y,z)\) ,边长分别为 \(a\)\(b\)\(c\) ,颜色为 \(cor\)长方体\(cor\) 可以是定义好的常量,也可以是{r,g,b,不透明度}

DrawCube(Vector3{600,60,600},10,10,10,RED);DrawCubeWires(Vector3{600,60,600},10,10,10,BLACK);DrawText(TextFormat("Position: (%.1f, %.1f)", playerX, playerZ), 10, 10, 20, BLACK);DrawFPS(10, 40);ClearBackground(SKYBLUE);

基本结构

#include <raylib.h>//raylib有几个头文件,按需使用
#include <bits/stdc++.h>
using namespace std;
int main() {
	//这几个函数上面讲过了
	SetConfigFlags(FLAG_MSAA_4X_HINT);
	InitWindow(1920, 1080, "3D Terrain");
	SetTargetFPS(60);
	DisableCursor();
	//相机相关,自行BDFS
	Camera3D camera = { 0 };
	camera.fovy = 60.0f;
	camera.projection = CAMERA_PERSPECTIVE;
	camera.up = {0, 1, 0};

	while (!WindowShouldClose()) {//按ESC退出
		/*
		进行运算
		*/
		//--------------------------
		BeginDrawing();//开始画
		/*
		画
		*/
		BeginMode3D(camera);//开始画3D模型
		/*
		画3D模型
		*/
		EndMode3D();
		EndDrawing();
	}
	CloseWindow();//关闭
	return 0;
}

环境配置

推荐工具:懒人专用小熊猫C++(内置raylib)

升级你的小游戏

准备

一个完好的C++小游戏。

转化

输出

删掉。替换。
例如, \(a_{ij}\) 存的是高度。原来用 ASCLL 码来表示({--,++,==,##})。现在,

  • 如果你想做 2D 游戏,则用正方形的颜色来表示高度。
  • 如果你想做 3D 游戏,则用长方形的长和颜色来表示高度。DrawCube(Vector3{i,a[i][j]*0.5,j},1,a[i][j],1,Color{ 100, (unsigned char)a[i][j], 100, 255 });
如图, 3D 游戏用长方形的长和颜色来表示高度。

控制

当W键被按下换成if(IsKeyDown(KEY_W))
鼠标操作参照另见raylib所有API接口中文释义

收尾

调整。如DrawFPS(x,y);在屏幕 \((x,y)\) 位置输出帧率。

案例

EasyWorld(或用kkgithub)

1.0

使用WindowsAPISetConsoleTextAttribute(hOut,s))显示高度。色彩单一,有较大局限性。

2.0

用长方体的颜色来代表高度。DrawCube(Vector3{i,a[i][j]*0.5,j},1,a[i][j],1,Color{ 100, (unsigned char)a[i][j], 100, 255 });\((i,j)\) 位置画一个高 \(a_{ij}\) ,颜色越高越绿的长方体。

如图, EasyWorld2.0 游戏实景。

3.0

同上。

结语

你已初步掌握游戏开发。快拿去装B。

Tips

  • 按 ESC 退出程序
  • 涉及到数理
    • 极坐标与笛卡尔坐标转换
    • 向量
    • 三角函数

链接

posted @ 2025-04-14 20:17  Eden_star  阅读(188)  评论(0)    收藏  举报
//雪花飘落效果