🎥 一、Camera2D(2D 摄像机)示例:跟随玩家移动
这是最常用的 2D 摄像机写法,比如地图跟随、角色跟随、平滑移动等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include "raylib.h"
int main(void) { InitWindow(800, 450, "raylib Camera2D example"); SetTargetFPS(60);
Vector2 player = { 400, 225 };
Camera2D camera = { 0 }; camera.target = player; camera.offset = (Vector2){ 400, 225 }; camera.rotation = 0.0f; camera.zoom = 1.0f;
while (!WindowShouldClose()) { if (IsKeyDown(KEY_RIGHT)) player.x += 200 * GetFrameTime(); if (IsKeyDown(KEY_LEFT)) player.x -= 200 * GetFrameTime(); if (IsKeyDown(KEY_UP)) player.y -= 200 * GetFrameTime(); if (IsKeyDown(KEY_DOWN)) player.y += 200 * GetFrameTime();
camera.target = player;
BeginDrawing(); ClearBackground(RAYWHITE);
BeginMode2D(camera);
DrawCircleV(player, 20, RED); DrawGrid(20, 50);
EndMode2D();
DrawText("Use arrow keys to move", 10, 10, 20, DARKGRAY);
EndDrawing(); }
CloseWindow(); return 0; }
|
🧠 Camera2D 的核心思想
camera.target = 世界坐标中你想跟随的点
camera.offset = 这个点在屏幕上的位置(通常是屏幕中心)
camera.zoom = 缩放
BeginMode2D(camera) = 开启摄像机
EndMode2D() = 关闭摄像机
你以后做 2D 游戏框架时,这套接口几乎可以原样照搬。
🗻 二、Camera3D(3D 摄像机)示例:第一人称视角
这是 raylib 最经典的 3D 摄像机示例之一。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include "raylib.h"
int main(void) { InitWindow(800, 450, "raylib Camera3D example"); SetTargetFPS(60);
Camera3D camera = { 0 }; camera.position = (Vector3){ 4.0f, 2.0f, 4.0f }; camera.target = (Vector3){ 0.0f, 1.0f, 0.0f }; camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; camera.fovy = 45.0f; camera.projection = CAMERA_PERSPECTIVE;
while (!WindowShouldClose()) { UpdateCamera(&camera, CAMERA_FIRST_PERSON);
BeginDrawing(); ClearBackground(RAYWHITE);
BeginMode3D(camera);
DrawCube((Vector3){ 0, 1, 0 }, 2, 2, 2, RED); DrawGrid(20, 1.0f);
EndMode3D();
DrawText("Use WASD + mouse to move camera", 10, 10, 20, DARKGRAY);
EndDrawing(); }
CloseWindow(); return 0; }
|
🧠 Camera3D 的核心思想
camera.position = 摄像机位置
camera.target = 摄像机看向哪里
camera.up = 上方向
camera.fovy = 视野角度
UpdateCamera() = 内置摄像机控制(第一人称/第三人称)
BeginMode3D(camera) = 开启 3D 模式