使用 raylib 进行游戏开发
引入
背景
作者是蒟蒻,最近在开发3D游戏,见洛谷上似乎并没有关于 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);
- 有很多类似函数,另见raylib所有API接口中文释义。
 
基本结构
#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
使用WindowsAPI(SetConsoleTextAttribute(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 退出程序
 - 涉及到数理
- 极坐标与笛卡尔坐标转换
 - 向量
 - 三角函数
 
 
                    
                
                
            
        
浙公网安备 33010602011771号