使用 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 退出程序
- 涉及到数理
- 极坐标与笛卡尔坐标转换
- 向量
- 三角函数