C++游戏编程入门:基于SFML的四个实战项目与完整学习路径
1. 项目概述一份通往C游戏开发世界的免费“藏宝图”如果你对C游戏编程感兴趣但面对厚重的教材、复杂的开发环境和昂贵的引擎感到无从下手那么你很可能正在寻找一个能带你从零开始、手把手实践的免费学习资源。我最近在整理资料时发现了一份非常宝贵的免费资源——《C游戏编程入门第4版》的配套项目代码与学习指南。这不仅仅是一本书的电子版更是一个完整的、项目驱动的学习体系它完美地解决了初学者“学完语法不知道能干嘛”的困境。这份资源的核心价值在于它绕开了枯燥的理论堆砌直接通过四个完整的、可运行的小游戏项目如《伐木工》、《乒乓》、《僵尸竞技场》等来教授C。你将使用SFMLSimple and Fast Multimedia Library这个轻量级的多媒体库从打开第一个窗口、绘制一个精灵开始逐步深入到面向对象设计、碰撞检测、游戏状态管理、音效集成等核心游戏开发概念。对于任何想踏入游戏开发领域特别是对性能有要求的客户端开发、引擎底层感兴趣的开发者来说这是一条从“Hello World”到“Hello Game”的绝佳路径。我亲测了其中的项目环境搭建清晰代码结构循序渐进确实是一份不可多得的免费实战教程。2. 资源内容深度解析不止于代码更是一套完整的学习方法论这份《C游戏编程入门第4版》资源包其内容之丰富远超一本普通的电子书。它构建了一个从环境搭建到项目实战的完整闭环我们可以从以下几个层面来拆解它的核心构成。2.1 核心学习路径与项目演进资源严格按照书籍的章节顺序组织但它的精髓在于“做中学”。整个学习路径被设计为四个渐进式的游戏项目每个项目都引入新的C核心概念和游戏开发技术《伐木工》这是你的第一个图形化程序。重点在于建立开发环境Visual Studio SFML理解游戏主循环输入、更新、渲染学习使用SFML绘制精灵树木、云朵、蜜蜂、处理玩家输入键盘控制以及实现简单的游戏逻辑计时、分数。这里你巩固的是C基础变量、循环、条件判断和函数。《乒乓》从这里开始正式进入面向对象编程OOP。你将创建Bat球拍和Ball球类学习如何将游戏中的实体抽象为对象并封装其数据位置、速度和行为移动、绘制。核心知识点是类的定义、构造函数、成员函数以及AABB轴对齐包围盒碰撞检测的实现。《僵尸竞技场》这是一个2D俯视角射击游戏复杂度显著提升。它系统地引入了游戏架构的核心思想。你会学到资源管理编写TextureHolder类使用std::map和智能指针实现纹理的集中加载与高效复用这是避免内存泄漏和提升性能的关键。对象管理使用std::vector管理一群僵尸实践C标准模板库STL的容器。游戏状态实现HUD平视显示器、分数、生命值、关卡进度等。高级碰撞与音效处理子弹与僵尸、玩家与僵尸、玩家与道具之间的碰撞并集成音效反馈。《平台跳跃游戏》这是综合能力的终极考验。项目引入了更复杂的架构模式例如实体组件系统ECS的雏形或状态模式。你会接触到相机系统使用SFML的View类实现场景滚动让游戏世界大于屏幕。动画系统通过Animator类处理精灵帧动画。粒子效果实现下雨、火焰等简单的视觉效果。菜单系统构建游戏开始、暂停等交互界面。这个路径设计非常巧妙它让学习者在每个阶段都有明确的、可视化的成果并能清晰地感受到自己代码能力的进化。2.2 超越代码的附加价值工具链与思维培养这份资源之所以珍贵还因为它提供了许多“教科书外”的实战细节完整的工具链指南详细说明了如何在WindowsVisual Studio、macOS和Linux上配置SFML开发环境。对于初学者环境配置往往是第一道坎这份指南能节省大量排查时间。调试与错误处理资源中穿插了常见的编译错误、链接错误和运行时错误的排查思路比如SFML库链接不正确、资源文件路径错误等这些都是新手必然会踩的坑。性能优化启蒙在《僵尸竞技场》项目中通过TextureHolder引入的资源单例管理潜移默化地传达了避免重复加载、节省内存的优化思想。使用std::vector的reserve方法预分配内存也是处理大量游戏对象时的常用技巧。现代C特性引导虽然以C11/14为基础但在资源管理部分自然地引入了std::unique_ptr、std::shared_ptr等智能指针的概念为学习者平滑过渡到现代C内存管理实践打下了基础。注意在寻找和下载此类资源时务必通过可靠的开发者社区、开源代码托管平台如GitHub或知名技术博客。避免从不明来源下载以防文件包含恶意代码或版本错乱。这份资源通常以Git仓库或打包的ZIP文件形式存在包含所有源代码、资源文件图片、音效、字体和项目文件。3. 如何高效利用这份资源进行学习与复现拥有资源只是第一步如何高效地利用它达到学习目的才是关键。以下是我根据多年经验总结的实操路线图你可以像做实验一样一步步跟随并验证自己的理解。3.1 环境准备与项目初始化工欲善其事必先利其器。第一步是搭建一个稳定的开发环境。安装Visual Studio 2022前往微软官网下载Community社区版完全免费。在安装时务必勾选“使用C的桌面开发”工作负载。这是后续所有步骤的基础。获取SFML库访问SFML官网下载与你的Visual Studio版本和系统架构通常为x64匹配的预编译库。例如对于VS2022应选择“Visual C 17 (2022) - 64-bit”的版本。配置SFML到Visual Studio解压SFML到一个没有中文和空格的路径例如D:\Libraries\SFML-2.6.0。创建一个新的空项目在“解决方案资源管理器”中右键点击项目名 - “属性”。【关键步骤】配置包含目录在“C/C” - “常规” - “附加包含目录”中添加SFML的include文件夹路径如D:\Libraries\SFML-2.6.0\include。【关键步骤】配置库目录在“链接器” - “常规” - “附加库目录”中添加SFML的lib文件夹路径如D:\Libraries\SFML-2.6.0\lib。【关键步骤】添加依赖项在“链接器” - “输入” - “附加依赖项”中根据项目需要添加库文件例如sfml-graphics-d.lib; sfml-window-d.lib; sfml-system-d.lib; sfml-audio-d.lib;注意带-d后缀的是调试版库用于Debug配置。【易错点】拷贝DLL文件将SFML的bin文件夹下的所有.dll文件如sfml-graphics-d-2.dll复制到你的项目生成的可执行文件.exe所在目录通常是项目下的x64/Debug文件夹。忘记这一步会导致程序运行时提示“找不到xxx.dll”。完成以上配置后你可以创建一个简单的测试程序来验证环境是否成功#include SFML/Graphics.hpp int main() { sf::RenderWindow window(sf::VideoMode(800, 600), SFML Test); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type sf::Event::Closed) window.close(); } window.clear(sf::Color::Black); // 在这里绘制你的图形 window.display(); } return 0; }如果能够成功打开一个黑色窗口恭喜你环境搭建成功。3.2 分阶段项目实战与代码研读不要试图一次性理解所有代码。按照资源提供的四个项目顺序逐个击破。第一阶段模仿与运行。对于《伐木工》项目先不要急着写代码。将资源中的代码完整地复制到你的项目中确保它能编译并运行。你的目标是理解每一行代码在游戏运行中起到的作用。比如window.pollEvent(event)这个循环是做什么的为什么要在window.clear()和window.display()之间绘制图形第二阶段修改与实验。在成功运行项目后开始进行“破坏性”实验。尝试修改树木下落的速度、改变背景颜色、增加一个额外的得分项。在这个过程中你会被迫去阅读和理解相关的变量和函数这是最有效的学习方式。第三阶段重构与重写。当你对一个项目比如《乒乓》的代码逻辑比较熟悉后关掉参考代码尝试仅凭记忆和理解自己重写一遍。遇到卡壳的地方再回头查阅这个过程中暴露的知识盲点就是你最需要巩固的地方。第四阶段扩展与创新。这是能力的升华阶段。例如在完成《僵尸竞技场》后你可以尝试为僵尸添加不同的类型速度型、坦克型设计新的武器和道具甚至实现一个简单的关卡编辑器。这时你已经开始从“学习者”向“创造者”转变。3.3 核心概念动手实践以“面向对象设计”为例让我们以《乒乓》项目中Bat球拍类的实现为例深入理解如何将OOP思想应用于游戏开发。抽象与封装首先思考一个球拍在游戏中需要哪些属性数据和行为方法。属性位置position、大小size、移动速度speed、形状一个SFML的RectangleShape对象。行为初始化构造函数Bat、在每一帧根据输入更新位置update方法、将自己绘制到屏幕上draw方法、获取其边界用于碰撞检测getPosition,getSize。代码实现头文件 (Bat.h)这里声明了类的接口有哪些公开的方法和属性。#pragma once // 防止头文件被重复包含 #include SFML/Graphics.hpp class Bat { private: sf::Vector2f m_Position; // 位置 sf::RectangleShape m_Shape; // 形状 float m_Speed; // 速度 // ... 其他私有成员 public: Bat(float startX, float startY); // 构造函数 sf::FloatRect getPosition(); // 获取碰撞边界 sf::RectangleShape getShape(); // 获取形状用于绘制 void moveLeft(); // 向左移动 void moveRight(); // 向右移动 void update(sf::Time dt); // 更新位置dt是上一帧的时间差 void draw(sf::RenderWindow window); // 绘制自身 };源文件 (Bat.cpp)这里实现类的方法。#include Bat.h Bat::Bat(float startX, float startY) { m_Position.x startX; m_Position.y startY; m_Shape.setSize(sf::Vector2f(100, 10)); // 设置球拍大小 m_Shape.setPosition(m_Position); m_Shape.setFillColor(sf::Color::White); m_Speed 500.0f; // 每秒移动500像素 } void Bat::moveLeft() { m_Position.x - m_Speed; // 注意这里只是设置速度方向实际移动在update中结合时间完成 } void Bat::update(sf::Time dt) { // 根据速度和时间更新位置实现帧率无关的平滑移动 m_Shape.setPosition(m_Position); } // ... 其他方法的实现在主循环中使用在游戏主循环中你不再需要操作一堆分散的变量而是创建一个Bat对象并通过调用其方法来控制它。Bat playerBat(gameWidth / 2, gameHeight - 20); // 创建球拍对象 while (window.isOpen()) { // ... 处理事件 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { playerBat.moveLeft(); } // ... 其他按键处理 // 更新 playerBat.update(deltaTime); // deltaTime是上一帧所用时间 // 渲染 window.clear(); playerBat.draw(window); // 委托Bat对象自己绘制 window.display(); }通过这个简单的例子你可以看到OOP如何让代码结构更清晰、更易维护。当游戏中有成百上千个对象时这种组织方式的优势将无可比拟。4. 学习过程中的常见“坑”与高效排错指南在跟随这份资源学习时即使有详细的指南也难免会遇到问题。以下是我总结的几个高频“坑点”及其解决方案希望能帮你节省大量折腾的时间。4.1 环境配置与编译链接错误这是新手遇到最多问题的地方。问题1无法打开包括文件: “SFML/Graphics.hpp”: No such file or directory原因编译器找不到SFML的头文件。解决检查项目属性中“附加包含目录”的路径是否正确是否指向了SFML解压后的include文件夹。确保路径中使用了反斜杠\或正斜杠/并且没有多余的空格或中文。问题2LNK2019: 无法解析的外部符号...等链接错误原因链接器找不到SFML的库文件.lib。解决确认“附加库目录”指向了正确的lib文件夹。确认“附加依赖项”中输入的库文件名完全正确且Debug配置链接的是带-d后缀的库如sfml-graphics-d.libRelease配置链接的是不带后缀的库如sfml-graphics.lib。检查项目平台x86还是x64与下载的SFML库平台是否一致。现代开发强烈建议统一使用x64。问题3程序运行时崩溃或提示缺少DLL原因可执行文件运行时需要动态链接库.dll但它们不在同一目录或系统路径中。解决将SFML的bin文件夹下对应的.dll文件Debug版用带-d的复制到你的.exe文件所在的目录。一个更一劳永逸的方法是在系统环境变量Path中添加SFML的bin目录路径但项目间拷贝时仍需注意。4.2 代码逻辑与运行时问题当环境搞定后代码本身的问题就会浮现。问题4精灵图片或音效加载失败显示为空白或没有声音原因资源文件路径错误。这是非常常见的问题。解决绝对路径 vs 相对路径在代码中加载资源时如texture.loadFromFile(graphics/background.png)使用的是相对路径。这意味着graphics文件夹必须位于你的程序工作目录下而非项目源代码目录。设置工作目录在Visual Studio中右键项目 - “属性” - “调试”将“工作目录”设置为$(ProjectDir)这样程序就会在项目文件夹下寻找graphics文件夹。或者直接将资源文件夹复制到.exe文件所在的目录。检查文件名和大小写Windows路径不区分大小写但良好的习惯是保持一致。问题5游戏运行速度不稳定有时快有时慢原因游戏主循环没有实现“帧率独立”的移动。解决这是游戏编程的一个核心概念。物体的移动速度不应该基于“每帧移动固定像素”而应该基于时间。你需要获取上一帧到这一帧所经历的时间deltaTime然后用速度 * deltaTime来计算本帧应移动的距离。sf::Clock clock; // 游戏时钟 while (window.isOpen()) { sf::Time dt clock.restart(); // 获取上一帧耗时并重启时钟 float deltaTime dt.asSeconds(); // 转换为秒 // 更新物体位置 playerSprite.move(playerSpeed * deltaTime, 0); // 基于时间的移动 // ... 其他更新和渲染 }这样无论帧率是60fps还是144fps物体每秒移动的距离都是恒定的。问题6碰撞检测不准确或“抖动”原因简单的AABB检测shape.getGlobalBounds().intersects(otherShape.getGlobalBounds())在高速移动的物体间可能会发生“穿透”或者因为每帧更新位置后重叠而导致连续碰撞。解决使用更精确的形状对于非矩形物体可以使用多个矩形组合或者使用圆形、像素检测性能开销大。分离轴定理SAT对于凸多边形这是更通用的算法。使用物理引擎对于复杂项目集成如Box2D这样的物理引擎是更专业的选择。但作为入门理解AABB的原理并处理好移动速度与碰撞检测的顺序更为重要。通常先进行移动再进行碰撞检测和响应如将物体移出碰撞区域。4.3 学习心态与效率问题问题7看代码能懂自己写就懵对策这是正常现象说明动手练习不够。强制自己进入“第三阶段”重构与重写。哪怕一开始是照着抄抄的过程中思考“为什么这一行要写在这里” 逐步过渡到半默写最后完全独立实现一个小功能。问题8遇到问题不知道如何搜索对策将错误信息中的关键英文单词如错误代码LNK2019、函数名loadFromFile直接复制到搜索引擎。多使用“SFML”、“C”作为搜索关键词的前缀。善用官方文档SFML官网的教程和API文档非常清晰和Stack Overflow社区。5. 从入门到进阶这份资源之后的学习路线规划当你成功复现了资源中的所有四个项目并对其中的代码有了自己的理解后恭喜你你已经跨过了C游戏编程最艰难的门槛。接下来你可以沿着以下几个方向继续深入将这份入门资源的价值最大化。5.1 深入现代C与设计模式资源中的代码为了清晰易懂可能没有使用最现代的C特性。你可以尝试用新学到的知识去重构项目用智能指针管理资源将原始的new/delete或者普通的指针成员替换为std::unique_ptr或std::shared_ptr。思考哪种智能指针更适合游戏对象通常是unique_ptr表示独占所有权。使用范围for循环将传统的for (int i 0; i zombies.size(); i)循环改为更简洁的for (auto zombie : zombies)。引入简单的设计模式例如你能否将游戏中的不同状态开始、进行中、暂停、结束用状态模式来管理能否将对象的创建过程抽象成一个工厂方法5.2 探索更强大的游戏开发框架与引擎SFML是一个优秀的入门库但它主要提供图形、窗口、音频等底层接口。当你渴望制作更复杂的游戏时可以考虑SDL2与SFML定位类似但更底层、更跨平台被许多商业游戏和模拟器使用。学习SDL2能让你对游戏底层有更深的理解。游戏引擎Godot开源、轻量、脚本语言GDScript易学非常适合2D和3D独立游戏开发。它的架构清晰甚至可以用来学习引擎设计本身。Unity (C#)或Unreal Engine (C)工业级引擎。如果你对C情有独钟且目标是大中型3D项目Unreal Engine是绝佳选择。它的源码可供学习但学习曲线陡峭。Cocos2d-x专注于移动端的开源C游戏框架在国内手游开发中有广泛应用。5.3 参与开源项目与社区理论学习终须实践检验而参与真实项目是成长最快的方式。在GitHub上寻找SFML项目搜索“SFML game”、“C game”等关键词找到一些星星数较多、代码结构清晰的开源小游戏。阅读源码不要急着贡献代码。先下载下来编译运行然后从头到尾阅读它的代码结构。对比它和你自己写的项目思考别人的架构好在哪里。尝试修复Issue在项目的Issues页面找一些标记为“good first issue”或“bug”的简单问题。尝试理解问题所在并提交你的修复代码Pull Request。这个过程会极大地锻炼你阅读他人代码和协作开发的能力。加入社区如SFML官方论坛、Reddit的r/gamedev和r/cpp板块、国内的C技术社区。积极提问更要尝试回答别人的问题。在帮助他人解决问题的过程中你自己的知识会得到极大的巩固和升华。这份《C游戏编程入门第4版》资源就像一张精心绘制的地图为你指明了从零开始学习C游戏开发的道路。它最大的意义不在于提供了免费的代码而在于展示了一种“通过做游戏来学编程”的高效方法。我个人的体会是编程尤其是游戏编程是一门极度依赖动手和实践的技能。不要停留在阅读和理解的层面打开你的IDE亲手敲下每一行代码解决每一个冒出来的错误当你看到自己编写的窗口里出现第一个可控制的精灵时那种成就感将是驱动你继续前进的最大动力。记住每一个复杂的游戏都是由无数个简单的draw和update调用组成的从这个小项目开始你已经在路上了。

相关新闻

Unity 2D物理锁链实现:HingeJoint2D组件详解与拖拽交互方案

Unity 2D物理锁链实现:HingeJoint2D组件详解与拖拽交互方案

1. 项目概述与核心价值 最近在做一个2D平台解谜游戏,里面有个场景需要玩家拖动一条锁链去勾住远处的机关。一开始我琢磨着是不是得自己写一堆复杂的物理计算和碰撞检测,想想就头大。后来把Unity的2D物理关节系统翻出来研究了一下,发现用 Hin…

2026/10/19 16:20:34 阅读更多 →
基于SpringBoot+Vue的班级管理系统开发实践

基于SpringBoot+Vue的班级管理系统开发实践

1. 项目概述 这个大学生班级管理系统采用前后端分离架构,前端使用Vue.js框架,后端基于SpringBootMyBatis技术栈,数据库选用MySQL。系统实现了班级管理中的核心功能模块,包括学生信息管理、课程管理、成绩统计、通知公告等常见教学…

2026/10/18 17:08:15 阅读更多 →
信息学奥赛鸡尾酒疗法题目解析与算法实现

信息学奥赛鸡尾酒疗法题目解析与算法实现

1. 鸡尾酒疗法与信息学奥赛解题思路解析 最近在辅导学生准备信息学奥赛时,遇到了《信息学奥赛一本通》中的1072题——"鸡尾酒疗法"。这道题目看似简单,但蕴含着算法设计和医学统计的巧妙结合。作为长期从事算法教学的老师,我发现很…

2026/10/15 17:49:12 阅读更多 →

最新新闻

PSoC+RC522的RFID-UART读写:固件架构与避坑指南

PSoC+RC522的RFID-UART读写:固件架构与避坑指南

简介:一套基于可编程片上系统(PSoC)的射频识别(RFID)读写器完整工程,面向嵌入式开发者、电子工程类学生及物联网工程技术人员,用于解决RFID读写器与上位机之间通过通用异步收发器(UA…

2026/10/19 16:20:23 阅读更多 →
STM32 EC11旋转编码器驱动:硬件计数替代外部中断的稳定方案

STM32 EC11旋转编码器驱动:硬件计数替代外部中断的稳定方案

简介:STM32F407 EC11旋转编码器驱动函数,面向使用ARM Cortex-M4内核微控制器进行运动控制的嵌入式开发者,可广泛应用在工业控制、消费电子与物联网终端等场景。驱动代码围绕EC11编码器的A/B双相位脉冲检测、Z相零点定位及旋转方向判断展开&am…

2026/10/19 16:20:23 阅读更多 →
电力安全生产数智化落地指南:从感知闭环到实战经验

电力安全生产数智化落地指南:从感知闭环到实战经验

数智技术这几年在电力行业里被反复提及,我参与过多个安全生产相关的数智化改造项目,自己也在生产一线踩过不少坑。这个题目看着很大,实际上拆开来看,就是“怎么把人工智能、物联网、大数据这些技术真正用起来,让电力生…

2026/10/19 16:20:23 阅读更多 →
AI率检测原理与降重实战:千笔降AI率助手如何让论文更像人写的

AI率检测原理与降重实战:千笔降AI率助手如何让论文更像人写的

又到期末和毕业季,群里讨论最热闹的话题已经从“哪个查重网站更准”变成了“AI率怎么还这么高”。很多专科的朋友私信问我:明明是自己参考文献一点点写出来的,为什么系统一看就标了“疑似AI生成”?这里面有个认知误区——AI率查的…

2026/10/19 16:20:23 阅读更多 →
Hive函数性能优化实战:聚焦执行阶段、数据倾斜与内存水位

Hive函数性能优化实战:聚焦执行阶段、数据倾斜与内存水位

1. 这不是函数列表,而是一张Hive数据处理的作战地图“Hive 中的函数概览”——看到这个标题,很多人第一反应是翻文档、查手册、背函数名。但我在某公司数据平台组带过三届新人,也给五个业务部门做过Hive调优支持,发现一个反复出现…

2026/10/19 16:20:23 阅读更多 →
海康网络摄像机字符叠加OSD例程:BCB6.0老项目集成指南

海康网络摄像机字符叠加OSD例程:BCB6.0老项目集成指南

简介:面向视频监控开发者的海康网络高清摄像机字符叠加OSD例程,演示在BCB6.0集成环境中调用海康SDK实现OSD文字信息显示。压缩包共56个文件,约11.61MB,主要包含动态库、静态链接库、头文件、C源码及工程配置,另附可直接…

2026/10/19 16:19:22 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →