OpenClaw:用Go重写PS1经典游戏引擎的开源复刻实战解析
OpenClaw是我最近一直在跟踪的开源复刻项目目标很明确把PS1上的《古惑狼》初代用现代工程手段重新做一遍。一听到“开源复刻”不少人第一反应是“又一个模拟器”但OpenClaw的思路完全不同——它不是模拟PS1硬件而是把原版光盘里的游戏资源提取出来再用Go语言重写一个全新的引擎去驱动这些资源。这个方向对想研究老游戏逆向、了解游戏引擎构成、或者单纯想自己动手改经典游戏的人都太值得拆开看一看了。这篇文章我尽量把话说透它到底复刻了什么、原版数据是怎么被解析的、用Go写游戏引擎要趟哪些坑、怎么把这个项目跑起来以及在这个基础上做二次开发时要注意的边界。全程不贴官方文档搬运全部是我实际跑项目、读代码、改参数之后的记录。1. 先搞清楚一件事OpenClaw不是模拟器1.1 复刻和模拟器的本质区别模拟器做的事情是“模拟硬件”它读取原版游戏光盘里的二进制可执行文件然后在软件层面翻译那台主机的CPU指令、图形协处理器的行为、内存布局等等。好处是兼容性强原盘插进去就能跑代价是工程复杂度高而且性能开销大。OpenClaw走的是另一条路它把PS1游戏的“数据”和“代码”分开了。原版光盘里的贴图、模型、关卡布局、音效波形这些数据仍然是素材但所有逻辑——角色移动、重力、碰撞、摄像机、敌人AI、剧情触发——都是开源社区重写的。你可以理解为房子还是原来的毛坯结构但装修队换了一批人整套管线全改了。这个选择非常聪明。现代平台早就跑得动PS1时代的图形量了真正难的是游戏逻辑和硬件特性的还原。把原始二进制代码扔到模拟器里等于把当年所有奇怪的光栅化行为和性能瓶颈也一起保留了而重写引擎则能在保留玩法的前提下用更舒服的方式展示画面、处理输入、接入现代API。1.2 为什么选Go作为引擎语言我一开始看到Go出现在游戏引擎项目里其实挺意外的。主流商业引擎大多是C、C#、甚至RustGo更多出现在服务端、网络工具、CLI程序这些领域。但仔细读OpenClaw的代码和设计取舍你会发现这个选型是有道理的。第一Go的交叉编译能力非常强。游戏项目最怕什么最怕“写好了只能在自己机器上跑”。Go可以很方便地产出Windows、Linux、macOS的二进制甚至能编出WebAssembly版跑到浏览器里。对开源复刻项目来说让更多人“低门槛玩到”比极致性能重要得多。第二我对Go的并发模型一直评价很高。游戏运行时内部有大量并行任务加载资源、解码音频、同步输入、渲染提交。用goroutine和channel组织这些模块逻辑会非常清晰不像C那样每处都要手写锁和线程池。第三Go的构建产物是单文件部署简单。这个项目天然面向“非专业游戏开发者”的受众大家拿到一个可执行文件配置好数据路径双击就能跑。这个体验对社区推广非常有利。当然Go也有它的代价。它的垃圾回收机制会导致偶发性的帧停顿所以在OpenClaw里你经常能看到手动做对象池、预分配缓冲区的代码——就是为了减少GC在游戏循环里的干扰。这一点后面讲引擎循环的时候我会专门展开。1.3 项目整体怎么工作把OpenClaw的架构简化成一条流水线大概是这样的启动时扫描指定目录找到原版光盘提取出的数据文件。解析各种资源容器把贴图、网格、关卡数据、音频加载进内存。引擎层提供窗口系统、输入抽象、渲染管线、音频输出。游戏逻辑层用这些资产驱动一个经典平台跳跃玩法。渲染层用现代图形API把内容画出来同时保留一些PS1时代的视觉特征。这套结构让我想起早年自己用SDL写小游戏时的分层方式。底层复用、上层自由调试起来非常舒服。你不需要理解整台主机的汇编也能在某个模块里快速定位问题。2. 拆原版数据WAD容器、贴图格式和关卡坐标2.1 从镜像文件到可读文件系统第一步就卡了很多人OpenClaw需要原始游戏数据但这个数据不是把整个ISO丢进去就能用。PS1游戏光盘使用的是ISO9660文件系统但很多游戏资源并不以标准文件形式暴露而是被打包成专有容器。我通常会把一张光盘先做成.bin/.cue镜像然后挂载成可读目录。你可以用一个通用工具提取出光盘根目录下的大块文件比如CRASH.WAD、DRIVER.WAD之类的命名。看到这些带WAD后缀的文件就该知道真正的游戏内容都藏在这里面了。WAD最早来自“Wheres All Data”这类缩写本质上就是一个带目录表的资源大包前面通常是文件列表后面是一块块偏移和大小严格对齐的数据区。2.2 纹理、模型和关卡布局的三层解析把WAD打开之后里面的内容可以粗略分成三类。第一类是纹理。PS1时代最常见的还是TIM格式这是主机标准纹理格式色深从4位、8位到16位都有CLUT调色板也内嵌在数据块里。解析TIM不算难难的是把游戏里五花八门的变体都照顾到。有些贴图是4位灰度加CLUT有些是16位直接色还有一些是半透明层的组合。我见过最阴间的处理是纹理的位序和掩码没有完全按标准实现结果颜色通道错位角色皮肤变成蓝紫色。第二类是模型。初代《古惑狼》的模型精度放到今天看很粗糙顶点数少面片大有些还会做假的“低模阴影面”。解析模型时最关键的是顶点顺序、法线和UV映射表。PS1时代为了省内存很多模型会把顶点数据压缩成定点数有的干脆用一字节有符号数表达坐标。你要先把这些数值还原成浮点坐标再按索引表组装三角形。第三类是关卡布局。这是最容易让新手崩溃的地方。一个关卡不只是“一张地图”它包含地面网格、碰撞边界、敌人出生点、箱子坐标、奖励物品、摄像机轨道、触发事件的区域。这些东西散落在二进制流的各个角落通常没有注释。实战里我的做法是先找出游戏运行时打印的对象表再对照内存里的坐标值反推字段顺序。2.3 一个解析WAD的Go小工具我调试的时候写过一个非常基础的WAD解析器思路可以作为参考代码本身做成了通用逻辑type WadEntry struct { Name string Offset uint32 Size uint32 } func readWadTable(r io.Reader, count int) ([]WadEntry, error) { entries : make([]WadEntry, 0, count) for i : 0; i count; i { var nameBuf [16]byte if _, err : io.ReadFull(r, nameBuf[:]); err ! nil { return nil, err } var e WadEntry e.Name strings.TrimRight(string(nameBuf[:]), \x00) if err : binary.Read(r, binary.LittleEndian, e.Offset); err ! nil { return nil, err } if err : binary.Read(r, binary.LittleEndian, e.Size); err ! nil { return nil, err } entries append(entries, e) } return entries, nil }这段代码不是为了直接跑在OpenClaw里而是帮你建立“怎么去读一个老游戏资源包”的直觉。拿到目录表之后你就可以对每个条目单独分析这个块是纹理、网格还是关卡脚本接下来的工作就是不断用十六进制查看器、字符串扫描和坐标可视化来“考古”。2.4 原版资源中容易踩的格式坑解析老游戏资源格式坑多到能单独开一篇。我踩过最典型的几个版本差异美版、日版、欧版的WAD内部结构有时不一样同一个偏移量在不同区域版本里可能是完全不同的字段。所以我建议用原版光盘的同一区域版本作为数据源混着用大概率出问题。字节序PS1是little-endian但很多工具导出数据时会默认读成big-endian。一个小数点对不上整个模型就散架了。对齐填充很多资源块会按2字节或4字节对齐解析时必须手动跳过填充区否则后续偏移全部错位。非法字符串WAD里的文件名经常有未清零的字节直接当字符串打印会带上一堆乱码记得先TrimRight。解析工具不用一次写到完美。我自己的做法是先写“输出每块的前64字节”的探查模式再不断迭代字段定义。TDD那一套在这种逆向场景下意外好用你把已知字段的解析结果固定成测试后续改解析器时就不用担心把之前的逻辑改坏。3. 用Go重写引擎帧循环、镜头轨迹与碰撞手感3.1 固定步长主循环的选型游戏引擎的心脏是主循环每一帧处理输入、更新逻辑、渲染画面。写起来不难难的是“时间步长”怎么设计。如果你直接“渲染多快更新就多快”游戏逻辑就会依赖于显示器刷新率60Hz和144Hz下跳跃高度、敌人速度都会不一样。OpenClaw采用的方案我在其他平台游戏里也常用固定时间步长逻辑更新灵活的渲染插值。逻辑层固定每1/60秒推进一次渲染层可以在两个逻辑帧之间做插值让画面看起来顺滑。这样做最大的好处是物理和碰撞的结果是可复现的不会出现“这次跳过去了下次却卡住”的玄学问题。在Go里实现这个循环时我特别喜欢用timer和sleep来控制节奏。但要注意一点Go的timer调度精度不是实时的极端情况下会积压逻辑帧导致“螺旋死亡”。常见的应对方法是在循环里累计欠账时间每次最多追赶3到5帧超过就丢弃保证游戏不会越跑越卡。3.2 摄像机轨迹与2.5D镜头的调校《古惑狼》初代的镜头语言非常特别它不是一个自由旋转的3D摄像机而是把每个关卡设计成一条近似的“摄像机轨道”角色在其中前进时镜头沿着轨道移动制造出2.5D的视觉效果。这个设计今天看起来没那么震撼但在当时大大减少了场景裁剪和碰撞计算的负担。复刻这种镜头核心是搞清楚“轨道数据”到底怎么编码。有的关卡镜头是直线段有的带转弯和坡度。我建议把镜头的路径点可视化出来再调别对着数字硬猜。先画出曲线的控制点再让角色在世界坐标里跑一遍观察镜头跟随的响应。镜头阻尼也值得调。太硬的镜头会让玩家晕太软的镜头会让操作显得迟钝。我个人喜欢做一阶低通滤波用current lerp(current, target, 1 - pow(0.001, dt))这样的方式控制跟随速度。参数让策划同学反复试最后通常落在0.85到0.95之间。3.3 平台跳跃手感破坏盒、土狼时间与跳跃缓冲复刻经典平台跳跃最大的难点不在渲染在手感。很多玩家觉得“角色够不够跟手”其实是几组参数的共同结果。第一是碰撞盒。PS1时代的碰撞盒很多是“整块矩形”今天的玩家更接受略窄一点的盒子视觉上角色明明擦到边了但判定依然能过。OpenClaw的碰撞模块其实可以很灵活地调整盒子的宽高和偏移我建议把碰撞体积可视化开关做成调试快捷键跑起来直接看线框。第二是土狼时间。角色离开平台后短时间内仍然允许执行跳跃操作这个机制能极大缓解玩家在边缘起跳时的挫败感。一般这个窗口在80到120毫秒太长了会让人觉得角色在空中“飘”。第三是跳跃缓冲。玩家在落地前一点点时间按下跳跃键系统应该记住这次输入等角色落地后再触发跳跃。这个缓冲窗口我一般设在100毫秒左右。很多手感问题的根源不是“起跳高度不够”而是“输入没有被正确接收”。另外重力加速度、初速度、最大下落速度这三项要一起调。初速度决定起跳高度重力决定上升弧线的陡峭程度最大下落速度决定从高处掉落时的“坠”感。《古惑狼》原版的跳跃偏“重”下落快所以复刻时我会刻意把重力系数调得比一般物理模拟高20%左右。3.4 音频与触发事件声音这块经常被忽略但对沉浸感影响极大。PS1时代的音频有两类一种是存储在内存里的音效波形通常是VAG压缩格式另一种是CD音轨负责背景音乐。OpenClaw要还原这两者得处理采样率转换、循环点标记和轨道切换时机。音效触发机制的复刻比解码更要紧。原版里玩家踩中箱子、拾取水果、被敌人攻击每种事件都会立刻打断当前同类型的音效并重新播放否则会出现“音效排队导致动作延迟”的违和感。我建议在事件系统里把音频触发做成“立即模式”声音优先级高直接抢占同槽位。BGM的循环点是另一个容易被忽略的事。PS1 CD音轨的循环不是简单从头播放而是有一个精确的“循环开始位置”。如果复刻时忽略这个点音乐每次循环都会顿一下。解法通常是维护一个专门的循环偏移表在回调触发到结束位置时回到指定偏移继续播。4. 把项目跑起来环境配置、数据路径和四类典型报错4.1 编译环境和命令OpenClaw对编译环境的要求不算高但它用到了CGO和图形API相关的C库所以系统里必须有一套C编译器和对应的开发头文件。Linux上通常要装build-essential和图形库开发包Windows上要确保安装了MinGW或者VS的C工具链macOS则直接要装Command Line Tools。准备工作做完之后核心命令就两条go build ./cmd/OpenClaw ./OpenClaw -data /path/to/crash_data如果希望跑成浏览器版本Go的WebAssembly支持可以直接利用GOOSjs GOARCHwasm go build -o main.wasm ./cmd跑浏览器版要注意的就是wasm文件服务器得带正确的MIME类型以及Go的wasm“胶水JS”需要在页面上正确引入缺一不可。4.2 资源文件应该放哪里这个坑我初次跑的时候踩得很实。项目编译没问题双击运行却直接黑屏退出日志里只有一句找不到数据。OpenClaw不会自己创造原版数据也不会自动去读取ISO它需要的是你提前从原版光盘中提取好的资源目录。我的建议是建一个干净的crash_data目录把提取出来的WAD和音频文件按项目文档要求放好再通过命令行参数或配置文件把这个路径传给程序。多个版本之间容易搞混的是文件布局有时候你以为是根目录一个WAD包项目其实期待的是crash_data/GAME/子目录下的多个分包。最好做法是先跑一次官方示例的数据结构然后对照自己的目录逐层核对。4.3 四类常见问题的排查链路我把跑社区反馈和群聊里见过的问题归成了四类每一类都有相对固定的排查路径。第一类是启动即黑屏或白屏。优先级最高的怀疑对象是资源路径没配对先去确认日志里数据目录是否被成功加载。如果路径没问题再看纹理解码是否报错。黑屏但音频还在响通常是渲染线程没拿到纹理数据或者图形上下文初始化失败。第二类是模型错位、贴图花掉。这类多数不是代码问题而是资源文件格式没被正确识别。去查纹理的位深、CLUT偏移和尺寸读数。我之前遇到过看起来像“雪花屏”的花纹最后发现是16位纹理被我当成了8位去读。第三类是角色陷入地面或浮空走路。这通常是碰撞数据解析错误坐标缩放没对齐。打开调试绘制看碰撞体是不是跟视觉网格离了十万八千里。一般问题出在模型坐标轴方向和碰撞网格的单位换算上。第四类是音频爆音或卡顿。优先检查采样率。PS1的语音采样率并不统一有的音效是18900Hz有的接近44100Hz。如果播放器硬按44100Hz去读其他采样率的数据声音就会变得又尖又怪。加上一个通用重采样器能解决大多数版本差异。5. 在OpenClaw上继续折腾改关卡、调手感以及资产红线5.1 用JSON描述关卡并接入引擎把原版二进制关卡数据读懂之后最自然的下一步就是“自己造新关卡”。直接手写二进制不现实更友好的方式是设计一个中间的文本格式。我习惯用JSON描述关卡的基本要素平台形状、敌人位置、道具、触发区域、镜头轨道点。启动时加载为通用对象列表再由引擎生成对应的碰撞体和实体。这样一个简单的JSON片段就能表示一个箱子{ type: crate, position: [12.5, 3.0, -4.2], content: fruit, hitbox: [1.0, 1.0, 1.0], trigger: onHit }加载器的工作就是把这个JSON映射成引擎内部实体。关键是别把“关卡数据格式”和“引擎渲染对象”耦合死。格式是用来给内容创作者写的引擎内部数据结构是用来给程序运行的中间加一层转换器后期调整自由度会高很多。5.2 调参数让角色“更像原作”但不照搬OpenClaw既然叫复刻玩家自然会拿它跟记忆里的原作对比。但复刻不等于像素级照搬。有些当年因为性能限制产生的行为在今天很容易被当成“手感精髓”实际上只是帧率不稳定导致的错觉。我的经验是先把角色的重力、跳跃高度、移动速度做成外部配置项再来回试玩对比。手感这东西直接抄PlayStation上的数据不一定适合今天的显示器刷新率和输入延迟。比如原版很多玩家觉得“跳得有点高”其实是60Hz刷新下角色动画帧数不足视觉上显得跳得猛。复刻时把渐变曲线调得更平滑玩家通常反而会更满意。另外一定要把“输入延迟”考虑进去。现代显示器、无线手柄都会引入几毫秒延迟如果复刻还按当年的原始参数走玩家会觉得角色迟缓。适当把跳跃缓冲和土狼时间拉长一点能补偿掉现代的输入链路损耗。5.3 资产使用的边界最后这一点必须摆到明面上讲清楚。OpenClaw再怎么开源也不代表你可以直接拿着原版贴图、模型、音频到处乱发。原版《古惑狼》的资源仍然是受保护的版权内容开源的是引擎代码不是素材。所以我的建议是自己玩随便折腾没问题。向别人提供“如何从自己手头的光盘提取数据”的教程没问题。直接分享整个数据包、原版贴图包、提取后的模型包问题很大。如果要做公开版本的Mod最好把原版资源替换成开放许可的自制素材。项目的价值在于让更多人理解老游戏是怎么做的而不是变成一份免费资源分发站。这个边界守住社区生态才能健康。我实际把OpenClaw哈跑通之后的感受是经典游戏的“复刻”比很多人想象中复杂得多它需要的不是单纯画质提升而是对旧时代数据结构、硬件特性和玩家预期的整体把握。如果你愿意花一个周末拆一拆原版数据再用Go调一调引擎循环很多以前觉得神秘的东西都会豁然开朗。

相关新闻

Tock 内核会议纪要解读(2022-01-21):用户态格式化、AppID 凭据检查与进程内存安全

Tock 内核会议纪要解读(2022-01-21):用户态格式化、AppID 凭据检查与进程内存安全

操作系统嵌入式嵌入式OS 【免费下载链接】tock A secure embedded operating system for microcontrollers 项目地址: https://gitcode.com/gh_mirrors/to/tock 点击查看 免费下载 本文基于 Tock 核心工作组 2022 年 1 月 21 日的会议纪要 core-notes-2022-01-21.m…

2026/10/10 2:35:01 阅读更多 →
免SDK绿色版Windows Mobile模拟器搭建:镜像配置与部署实战

免SDK绿色版Windows Mobile模拟器搭建:镜像配置与部署实战

简介:绿色版 Windows Mobile 模拟器是一款无需安装即可在电脑上模拟 Windows Mobile 系统的免注册工具,面向应用开发者、测试人员及早期移动系统爱好者,可用于体验和调试 WM 应用程序,无需真实设备即可快速验证功能与界面。整个资…

2026/10/10 2:35:01 阅读更多 →
Visual Studio 接入 AI 助手:LMLocal × Ace Data Cloud 配置指南

Visual Studio 接入 AI 助手:LMLocal × Ace Data Cloud 配置指南

想在熟悉的 Visual Studio 环境里使用 AI,又不想被某一种固定的接口配置绑住?一个实用的思路是:让支持 OpenAI 兼容接口的扩展对接 Ace Data Cloud。本文以 LMLocal 为例,按官方接入文档走完基础配置,并把最容易踩的路…

2026/10/10 2:34:01 阅读更多 →

最新新闻

开源实时协作Markdown编辑器HedgeDoc:自托管与权限管理指南

开源实时协作Markdown编辑器HedgeDoc:自托管与权限管理指南

如果你所在的环境里,协作记录一直散落在聊天记录、本地文本和邮箱附件之间,我建议你认真了解一下 HedgeDoc。它是一款开源的、基于 Web 的实时协作 Markdown 编辑器,浏览器打开就能用,也能在自己的服务器上搭建。我把团队内部的技…

2026/10/10 5:44:39 阅读更多 →
变步长扰动观察法光伏MPPT仿真:S-Function与Boost电路实践

变步长扰动观察法光伏MPPT仿真:S-Function与Boost电路实践

上次接了个仿真任务,要求搭一套能随光照强度突变“时刻跟踪”最大功率点的光伏MPPT模型。原以为Simulink里找一个现成模块拖进去就行,结果翻遍标准库也没找到变步长扰动观察法仿真模型,最后老老实实把算法写进s-function模块,配合…

2026/10/10 5:44:39 阅读更多 →
AnyPS5远程串流全攻略:从局域网到广域网,低延迟玩转PS5

AnyPS5远程串流全攻略:从局域网到广域网,低延迟玩转PS5

1. 从“AnyPS5”这个标题说起:它到底想解决什么问题第一次看到“AnyPS5”这个标题,我脑子里蹦出来的第一反应是:这大概率是一个围绕“跨平台串流”或者“远程访问”做文章的项目。为什么这么判断?因为“Any”这个前缀在技术圈里几…

2026/10/10 5:44:39 阅读更多 →
Zeek 证书透明度验证指南:深入解析 validate-sct.zeek 的 SCT 校验机制

Zeek 证书透明度验证指南:深入解析 validate-sct.zeek 的 SCT 校验机制

网络安全网络IDS 【免费下载链接】zeek Zeek is a powerful network analysis framework that is much different from the typical IDS you may know. 项目地址: https://gitcode.com/gh_mirrors/ze/zeek 点击查看 免费下载 导读 本文围绕 Zeek 的 policy/protoc…

2026/10/10 5:44:39 阅读更多 →
YCBlogs 开源项目全景导览:Android 组件封装库、视频播放器、线程池与多渠道打包实战指南

YCBlogs 开源项目全景导览:Android 组件封装库、视频播放器、线程池与多渠道打包实战指南

教程技术博客文档 【免费下载链接】YCBlogs 技术博客笔记大汇总,包括Java基础,线程,并发,数据结构;Android技术博客等等;常用设计模式;常见的算法;网络协议知识点;部分fl…

2026/10/10 5:44:39 阅读更多 →
项目成本管理实战:从估算到挣值管理的全流程解析

项目成本管理实战:从估算到挣值管理的全流程解析

1. 先搞清楚:项目成本管理到底在管什么很多人一听到"项目成本管理",第一反应就是"省钱"。特别是当它作为教材里的第11章出现时,很容易被理解成一套记账、算账、省钱的流程。但实际上,项目成本管理的核心不是&…

2026/10/10 5:43:39 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/9 6:17:20 阅读更多 →