首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PHP-FFI 绑 定 raylib-v5.5,实 现 享 受 视 频 游 戏 编 程

PHP-FFI 绑 定 raylib-v5.5,实 现 享 受 视 频 游 戏 编 程

作者头像
Tinywan
发布2025-05-25 14:33:56
发布2025-05-25 14:33:56
3700
举报
文章被收录于专栏:开源技术小栈开源技术小栈

PHP-Raylib 简介

“PHP-Raylib 是 Raylib 游戏开发框架的 PHP 绑定,允许开发者使用 PHP 语言创建 2D/3D 游戏、交互式应用和图形界面。它通过扩展(extension)或纯 PHP 封装的方式连接 PHP 和 Raylib 核心库,使 PHP 开发者无需切换语言即可快速实现图形化应用。

主要特点

1. PHP 语言优势

  • 对已有 PHP 开发者友好,无需学习新语言即可开发游戏或图形应用。
  • 可结合 PHP 的其他优势(如 Web 开发、数据库操作)构建混合应用(如 Web 游戏后端与前端图形界面)。

2. 功能完整性

  • 提供与 Raylib 核心库几乎一致的 API,包括窗口管理、2D/3D 渲染、输入处理、音频播放等。
  • 支持加载纹理、模型、字体等资源,实现动画、粒子系统等效果。

3. 跨平台支持

  • 与 Raylib 一致,支持 Windows、Linux、macOS 等主流系统,部分实现支持 WebAssembly(通过 Emscripten 编译)。

Raylib 简介

Raylib 是一款轻量级、跨平台的开源游戏开发框架,采用 C 语言编写,旨在简化视频游戏和交互式图形应用的开发。它以简单、高效、便携为核心设计理念,适合快速原型开发、教育或小型游戏项目。

主要特点

1. 轻量与简单

  • 核心库文件小(约 1MB),依赖少(仅需标准 C 库),编译和部署便捷。
  • API 设计简洁直观,新手友好,无需复杂的配置或框架知识即可快速上手。

2. 跨平台支持

  • 支持 Windows、Linux、macOS、Android、iOS、WebAssembly(通过 emscripten)等系统。
  • 同一套代码可在不同平台编译运行,大幅降低跨平台开发成本。

3. 功能模块丰富

  • 图形渲染:支持 2D/3D 渲染(基于 OpenGL 2.1+ 或 Vulkan),包含精灵动画、字体渲染、粒子系统等。
  • 输入处理:支持键盘、鼠标、游戏手柄、触摸等输入设备,提供便捷的状态查询和事件监听接口。
  • 物理与音频:内置基本的 2D 物理引擎(Box2D 绑定)和音频播放功能(支持 MP3、WAV 等格式)。
  • 资源管理:支持加载图片(PNG、JPG 等)、模型(OBJ、Gltf)、字体(TTF)等资源,无需额外依赖库。

4. 开源与社区

  • 基于 Zlib/libpng 许可协议,允许商业项目免费使用。
  • 社区活跃,文档齐全,提供丰富的示例代码(如官方示例包含 50+ 个 Demo)和教程。

典型应用场景

  • 独立游戏开发:适合制作 2D 平台游戏、解谜游戏、视觉小说等中小型项目(如《Undertale》早期原型曾用 Raylib 开发)。
  • 教育与学习:简洁的 API 适合编程入门或图形学教学,帮助学生理解游戏开发基础原理。
  • 交互式工具与可视化:可用于开发数据可视化工具、仿真程序或交互式演示软件。

依赖

  • PHP 7.4+
  • FFI 扩展
  • windows / linux / macos

安装

代码语言:javascript
复制
composer require kingbes/raylib

php.ini 启用 FFI 扩展

代码语言:javascript
复制
ffi.enable = true  

示例

代码语言:javascript
复制
<?php

require dirname(__DIR__) . "/vendor/autoload.php";

useKingbes\Raylib\Core; //核心
useKingbes\Raylib\Text; // 文本
useKingbes\Raylib\Utils; // 工具类

Core::initWindow(800, 450, "Hello World"); //初始化窗口

Core::setTargetFPS(60); //设置目标帧率

// 白色
$white = Utils::color(255, 255, 255);

// 绿色
$green = Utils::color(0, 255, 0);

// 主循环
while (!Core::windowShouldClose()) {
    Core::beginDrawing(); //开始绘制

    Core::clearBackground($white); // 清除背景

    // 绘制文本
    Text::drawText("Hello World", 190, 200, 20, $green);

    Core::endDrawing(); // 结束绘制
}

// 关闭窗口
Core::closeWindow();

自绘按钮案例

代码语言:javascript
复制
<?php

// 自绘按钮

require dirname(__DIR__) . '/vendor/autoload.php';

useKingbes\Raylib\Core; //核心
useKingbes\Raylib\Text; // 文本
useKingbes\Raylib\Utils; // 工具类
useKingbes\Raylib\Shapes; // 形状

// 宽高
$screenWidth = 800;
$screenHeight = 450;

Core::initWindow($screenWidth, $screenHeight, "自绘按钮"); //初始化窗口

Core::setTargetFPS(60); //设置目标帧率

$btnRect = Utils::rectangle(100, 100, 200, 50); //按钮矩形

$btnColor = Utils::color(255, 0, 0, 255); //按钮颜色

$btnText = "click me"; //按钮文本

$white = Utils::color(255, 255, 255, 255); //白色

$green = Utils::color(0, 255, 0, 255); //绿色

// 粉色
$pink = Utils::color(255, 105, 180, 255);

// 灰色
$gray = Utils::color(200, 200, 200, 255);

// 主循环
while (!Core::windowShouldClose()) {
    // 按钮交互
    $mousePos = Core::getMousePosition(); //获取鼠标位置
    $isHovered = Shapes::checkCollisionPointRec($mousePos, $btnRect); //检查鼠标是否在按钮上
    if ($isHovered) {
        $btnColor = $gray; //按钮颜色
        if (Core::isMouseButtonDown(0)) { //检查鼠标是否按下
            $btnColor = Utils::color(0, 0, 255, 255); //按钮颜色
        } elseif (Core::isMouseButtonReleased(0)) { //检查鼠标是否松开
            echo"click\n"; //输出点击信息
        }
    } else {
        $btnColor = Utils::color(255, 0, 0, 255); //按钮颜色
    }
    Core::beginDrawing(); //开始绘制
    Core::clearBackground($white); // 清除背景

    // 绘制按钮(带圆角)
    Shapes::drawRectangleRounded($btnRect, 0.5, 10, $btnColor); //绘制按钮

    // 绘制文本
    Text::drawText($btnText, $btnRect->x + 10, $btnRect->y + 10, 20, $green);

    Core::endDrawing(); // 结束绘制
}

// 关闭窗口
Core::closeWindow();

PHP-Raylib vs 原生 Raylib

PHP-Raylib

原生 Raylib(C/C++)

开发效率高,语法简单

性能略优,适合资源密集型应用

无需编译(FFI 方式)

需要编译,部署稍复杂

适合快速原型与 PHP 生态整合

适合大型游戏与底层优化

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHP-Raylib 简介
    • 主要特点
  • Raylib 简介
    • 主要特点
    • 典型应用场景
  • 依赖
  • 安装
  • 示例
  • 自绘按钮案例
  • PHP-Raylib vs 原生 Raylib
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档