关于c:Y-分钟速成-raylib

50次阅读

共计 2024 个字符,预计需要花费 6 分钟才能阅读完成。

源代码下载:learnraylib-cn.c

raylib 是一个跨平台、易用的图形库,围绕 OpenGL 1.1、2.1、3.3 和 OpenGL ES 2.0 构建。
尽管它是用 C 语言编写的,却有超过 50 种不同语言的绑定。本教程将应用 C 语言。
更确切地说,是 C99。

#include <raylib.h>

int main(void)
{
    const int screenWidth = 800;
    const int screenHeight = 450;

    // 在初始化 raylib 之前,能够设置标记位
    SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT);

    // raylib 并不要求咱们存储任何实例构造
    // 目前 raylib 一次只能解决一个窗口
    InitWindow(screenWidth, screenHeight, "MyWindow");

    // 设置咱们的游戏以每秒 60 帧的速度运行
    SetTargetFPS(60);

    // 设置一个敞开窗口的键。// 能够是 0,示意没有键
    SetExitKey(KEY_DELETE);

    // raylib 定义了两种类型的相机。Camera3D 和 Camera2D
    // Camera 是 Camera3D 的一个类型化定义
    Camera camera = {.position = {0.0f, 0.0f, 0.0f},
            .target   = {0.0f, 0.0f, 1.0f},
            .up       = {0.0f, 1.0f, 0.0f},
            .fovy     = 70.0f,
            .type     = CAMERA_PERSPECTIVE
    };


    // raylib 反对加载各种不同的文件格式的模型、动画、图像和声音。Model myModel = LoadModel("my_model.obj");
    Font someFont = LoadFont("some_font.ttf");

    // 创立一个 100x100 的渲染纹理
    RenderTexture renderTexture = LoadRenderTexture(100, 100);

    // WindowShouldClose 办法检查用户是否正在敞开窗口。// 可能用的是快捷方式、窗口管制或之前设置的敞开窗口键
    while (!WindowShouldClose())
    {

        // BeginDrawing 办法要在任何绘图操作之前被调用。BeginDrawing();
        {

            // 为背景设定某种色彩
            ClearBackground(BLACK);

            if (IsKeyDown(KEY_SPACE))
                DrawCircle(400, 400, 30, GREEN);

            // 简略地绘制文本
            DrawText("Congrats! You created your first window!",
                     190, // x
                     200, // y
                     20,  // 字体大小
                     LIGHTGRAY
            );

            // 大多数函数都有几个版本
            // 通常后缀为 Ex, Pro, V
            // 或者是 Rec、Wires(仅实用于 3D)、Lines(仅实用于 2D)。DrawTextEx(someFont,
                       "Text in another font",
                       (Vector2) {10, 10},
                       20, // 字体大小
                       2,  // 间距
                       LIGHTGRAY);

            // 绘制 3D 时须要,有 2D 的等价办法
            BeginMode3D(camera);
            {DrawCube((Vector3) {0.0f, 0.0f, 3.0f},
                         1.0f, 1.0f, 1.0f, RED);

                // 绘图时的红色色调将放弃原来的色彩
                DrawModel(myModel, (Vector3) {0.0f, 0.0f, 3.0f},
                          1.0f, // 缩放
                          WHITE);

            }
            // 完结 3D 模式,这样就能够再次一般绘图
            EndMode3D();

            // 开始在渲染纹理上绘图
            BeginTextureMode(renderTexture);
            {// 它的行为与方才调用的 `BeginDrawing()` 办法雷同

                ClearBackground(RAYWHITE);

                BeginMode3D(camera);
                {

                    DrawGrid(10, // Slices
                             1.0f // 间距
                    );

                }
                EndMode3D();}
            EndTextureMode();

            // 渲染有 Texture2D 字段的纹理
            DrawTexture(renderTexture.texture, 40, 378, BLUE);

        }
        EndDrawing();}

    // 卸载已载入的对象
    UnloadFont(someFont);
    UnloadModel(myModel);

    // 敞开窗口和 OpenGL 上下文
    CloseWindow();

    return 0;
}

延长浏览

raylib 有一些不错的例子
如果你不喜爱 C 语言你也能够看看 raylib 的其余语言绑定


有倡议?或者发现什么谬误?在 Github 上开一个 issue,或者发动 pull request!

原著 Nikolas Wipper,并由 0 个好心人批改。
© 2022 Nikolas Wipper
Translated by: lzw-723
本作品采纳 CC BY-SA 3.0 协定进行许可。

正文完
 0