- 博客(30)
- 收藏
- 关注
原创 第三人称——骑马系统以及交互动画
大家好,今天我们来聊一个在游戏开发里特别有“内味儿”的话题——第三人称视角下的骑马系统,以及那些让玩家觉得“哇,这马好听话”的交互动画。## 一、骑马系统的核心:不是“骑上去”,而是“合体”很多新手做骑马,就是把玩家角色(Humanoid)的骨骼绑定到马(Quadruped)的骨架上,然后播放一个“骑乘”动画。也就是说,马是“根运动体”,骑手是“依附体”,但骑手的动画要能独立播放(比如挥手、射箭),同时又要跟随马的起伏、转向。:上马前先“走到位”,再“吸附+播放过渡动画”,实现无缝衔接。
2026-07-31 16:20:43
318
原创 TCombobox,这个控件通常用来给用户提供选项列表。它们具有比VCL控件较强的定制性,可以使用样式窗口对每一个项进行外观的定制。 ...
在 Delphi 的 VCL(Visual Component Library)框架中,TCombobox 已经提供了基本功能,但很多开发者可能不知道,它还隐藏着强大的定制能力——通过样式窗口,我们可以为每一个选项定义独特的外观,让控件不再千篇一律。它与 VCL 控件的差异TCombobox 是 Delphi 中的一个标准控件,它结合了编辑框和列表的功能。事件,我们可以为每个列表项设计独立的外观,从简单的颜色变化到复杂的嵌入控件,几乎无所不能。这样,下拉列表中的每个项都会显示对应的颜色。
2026-07-30 16:00:10
236
原创 MySQL 备库为什么会延迟好几个小时
主库将数据变更写入二进制日志(binlog),备库通过I/O线程拉取这些日志并写入中继日志(relay log),然后SQL线程执行中继日志中的事件来更新备库数据。### 2.5 网络延迟与带宽限制虽然网络延迟通常只影响I/O线程,但如果网络不稳定,I/O线程无法及时拉取binlog,也会间接导致SQL线程空闲,最终表现为延迟。### 2.2 主库并发写入 VS 备库串行重放主库可以同时处理多个写请求(借助多线程),但传统复制中备库的SQL线程是单线程的。,因为备库的SQL线程需要优先处理复制事件。
2026-07-30 15:59:05
187
原创 的Java应用部署。Panel的容器化技术解决了环境配置复杂、版本冲突等问题,提供图形化界面和集中式日志管理,显著提升部署效率... ...
dockerfile# 文件名:Dockerfile# 使用OpenJDK 11作为基础镜像,减小体积FROM openjdk:11-jre-slim# 设置工作目录WORKDIR /app# 复制编译后的JAR文件COPY target/app.jar /app/app.jar# 暴露应用端口EXPOSE 8080# 启动命令,激活生产配置ENTRYPOINT ["java", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]环境配置复杂。
2026-07-29 15:34:23
161
原创 告别复杂配置!使用 Panel 运行环境功能轻松搭建 Java 应用
# 实战二:多版本 JDK 切换与 Maven 构建在实际项目中,你可能需要为不同应用使用不同 JDK 版本。### 场景:同时部署 JDK 8 和 JDK 17 的应用1. 在 Panel 中安装 JDK 8 和 JDK 17(如上方法)。2. 创建两个应用:一个使用 JDK 8,一个使用 JDK 17。## 实战一:在 Panel 中配置 Java 环境并部署 Hello World 应用### 步骤 1:通过 Panel 安装 JDK登录 Panel 管理界面,进入「运行环境」→「Java」。
2026-07-29 15:33:17
168
原创 Flutter应用自动更新系统:生产环境的挑战与解决方案
在实施时,务必考虑iOS和Android的特定限制,并设计合理的更新策略,以确保用户无缝过渡到新版本。4. 下载完成后,验证文件MD5,然后安装更新。对于Flutter应用而言,由于它运行在iOS和Android双平台上,自动更新系统面临独特的挑战:平台差异、版本管理、网络环境不稳定、以及用户体验的一致性。:iOS的App Store和Android的Google Play Store对更新机制有严格限制,例如iOS禁止应用内静默更新,而Android允许通过APK文件进行侧载。,提供用户友好的错误信息。
2026-07-25 15:47:16
243
原创 phpkg 让 PHP 摆脱 Composer 依赖地狱
它的工作流程是:1. 你指定需要哪个包2. phpkg 从远程仓库下载该包的源码3. 解析包本身的依赖,递归下载并复制到你的项目目录4. 所有代码成为你项目的一部分,不再有外部依赖管理这种方式避免了运行时依赖解析的复杂性,也彻底解决了版本冲突问题——因为所有代码都静态集成到了你的项目中。它不能完全替代 Composer,但在特定场景下,能让你的 PHP 项目回归到最初的纯净状态:没有复杂的依赖树,只有你需要的代码。的工具横空出世,它试图用全新的方式解决 PHP 的依赖管理问题。目录下的代码,改动立即可见。
2026-07-25 15:46:08
218
原创 技术 | 在单台电脑上管理多个 GitHub 账户并解决推送问题(测试中)
作为一名开发者,你可能同时拥有多个 GitHub 账户:一个用于工作,一个用于个人项目,甚至还有一个用于开源贡献。别担心,本文将手把手教你如何在单台电脑上优雅地管理多个 GitHub 账户,并解决常见的推送问题。如果 Git 的配置混乱,工作代码可能被错误地推送到个人仓库,或者因为 SSH 密钥冲突而被拒绝。- 克隆仓库时使用别名,并在项目内配置独立的用户名和邮箱。),这样在克隆仓库时,可以通过别名指定使用哪个密钥。## 步骤 5:克隆仓库并配置项目级 Git 信息现在,克隆仓库时需要使用别名。
2026-07-24 15:46:04
207
原创 第四步,通过自定义 Converter 进行序列化和反序列化
无论是将对象存储到文件、通过网络传输,还是与数据库交互,我们都需要一种机制来将内存中的对象转换为字节流(序列化),以及将字节流还原为对象(反序列化)。虽然许多框架(如 Jackson、Gson)提供了默认的序列化方式,但在实际项目中,我们常常需要自定义 Converter 来满足特定需求,比如处理复杂的日期格式、加密字段、或兼容遗留系统的数据格式。本文将带你深入理解自定义 Converter 的原理,并通过两个实战示例,手把手教你如何实现灵活的序列化和反序列化。:序列化时自动加密,反序列化时自动解密。
2026-07-23 15:44:52
236
原创 ClaimsPrincipal序列化为Json的正确姿势
中的某些声明可能包含敏感信息(如密码、令牌),序列化时需要过滤或脱敏。## 正确序列化方法### 方法一:使用自定义JsonConverter(推荐)创建自定义的。### 方法二:使用DTO模式(适合前端交互)创建轻量级的DTO类,只包含前端需要的字段,避免暴露敏感信息。:采用标准化格式(如JWT),避免直接序列化。,而是提取你需要的数据,形成安全的JSON结构。等非标准类型,序列化时会尝试递归解析,导致性能问题或错误。直接序列化时,常见的错误包括:-,手动提取关键属性,避免循环引用。
2026-07-23 15:43:41
219
原创 Aneiang.Yarp v2.3.0.25:让 AI 成为你的 API 网关运维副驾驶
我们不是在做一个"玩具项目"。YARP 是微软开源的 .NET 反向代理引擎,性能优秀,但它是"发动机",不是"整车"。Prompt Injection 防护:系统提示词使用边界标记声明"最终权威、不可覆盖",即使用户说"我是管理员"、“忽略之前的指令”,AI 也不会执行。“帮我建一个路由,把 /shop/* 的请求转发到 http://10.0.1.50:8080,路由名叫 shop-route。AI 助手通过 OpenAI 兼容协议对接,只要兼容 /v1/chat/completions 接口即可:。
2026-07-22 14:59:29
186
原创 扫码登录的实现原理
状态机并发安全 多个手机同时扫描同一个二维码,或同时收到扫描 / 确认请求,导致状态跳变、重复登录、数据不一致 使用 Redis Lua 脚本实现原子状态更新,所有状态变更必须通过 Lua 脚本执行,禁止直接修改 Redis 值 Lua 脚本在 Redis 中是单线程执行的,天然保证原子性,性能远超分布式锁。即使交换码泄露,也只能被用一次,且有效期极短。WebSocket推送(优雅): 确认后,服务端通过WebSocket推一条“确认成功”的消息给PC,带上一次性交换码,PC再用交换码去换正式token。
2026-07-22 14:58:34
180
原创 霍尔定理和最大流算法 入门
基础概念二分图:简单说就是"两个阵营"的图,比如左边是「男生」(集合A),右边是「女生」(集合B),边代表"男生和女生能配对",没有跨阵营内部的边(比如男生之间不连边)。完美匹配:左边每个男生都能找到一个唯一的女生配对,右边每个女生也只配一个男生(相当于"全员配对成功")。霍尔条件:对于左边集合A的任意子集S,S中节点的邻居集合N(S)的大小必须≥≥ S的大小。即∣��∣≥∣�∣∣N(S)∣≥∣S∣ 对所有�⊆�S⊆A 成立。
2026-07-21 15:03:49
216
原创 OPENSSL生成非对称加密公私钥
PKCS #8 未加密的 PEM 格式头为“-----BEGIN PRIVATE KEY-----”,加密的为“-----BEGIN ENCRYPTED PRIVATE KEY-----”。生成RSA私钥,以X509编码,指定生成的密钥的位数为2048位,该步生成的私钥是PKCS1格式,第二步将私钥转为PKCS#8编码。PKCS #1 PEM 格式头为“-----BEGIN RSA PRIVATE KEY-----”。2.上面生成的密钥格式也是pem格式,pem格式与der格式的转换参考上面rsa的方式。
2026-07-21 15:02:49
216
原创 从 AMBA 协议看 Valid-Ready 到 Credit-based 流控机制
axi-hsCHI 协议基于 credit 进行流控,下游输出 LCRDV 给上游,上游维护一个信用计数器,基于信用计数器的数量向下游分发请求个数:CHI-hs2.1.1 真实传输场景考虑一个真实的流水线互联,Valid/Ready 信号之间插入了 3 级 register slice 以切断组合路径:这里引入一个概念 —— 反压信息往返周期数TRRT。
2026-07-20 14:52:36
205
原创 SonnetDB:.NET 生态下的高性能嵌入式时序数据库
SonnetDB 是由 IoTSharp 团队(maikebing)开源发布的一款高性能时序数据库引擎,基于 C# / .NET 10 构建,采用 MIT 许可证。│ │ SonnetDB (推荐) │ │。写入性能 180万点/秒 ~20万点/秒 ~100万点/秒 ~50万点/秒。│ │ - 嵌入式部署 │ │。│ │ - 高吞吐写入 │ │。
2026-07-20 14:51:49
172
原创 记一次 Cloudflared Tunnel 在 Docker 中 DNS 解析异常的排查与解决
期在家庭 NAS(Debian 12)上通过 Docker 部署 Cloudflare Tunnel(cloudflared),用于将内网服务安全暴露到公网。按照官方文档编写的 docker-compose.yml 启动后,容器却一直报错,无法连接 Cloudflare 边缘节点。经过一系列排查,最终定位到 Docker 内部 DNS 解析机制的异常,并通过挂载宿主机 /etc/resolv.conf 绕过了问题。本文将完整记录排查过程、原理分析和最终方案,希望对遇到类似问题的朋友有所帮助。环境信息。
2026-07-19 15:44:40
176
原创 【机器人 / 强化学习】QAM 与 DIVL:评价-执行闭环的完美配合
能把价值方向转化为丝滑流畅的动作改进?DIVL 和 QAM 就是为这两个问题而生的。如果用更形象的方式来理解,DIVL 是"大脑",QAM 是"肌肉"。DIVL 负责"评价"环节:它的核心任务是更新 Q_φ 和 V_ψ 参数,产出越来越准确的"裁判"。DIVL 在教机器人怎么"看账本、识潜力"——让它变成一个非常有眼光、但不冒险的投资者。这个"裁判"能够从异质数据中识别出哪些动作有潜力,哪些是死路。
2026-07-19 15:44:08
236
原创 为什么K230/OpenMV不能直连MicroPython-mpremote?
为 K230 编写专属传输协议,连接前主动发送 IDE 识别令牌,强制唤醒调试模式,彻底告别激活命令,适合做插件、二次开发。K230 之所以特殊,核心不是 bug,而是官方为了适配 IDE 调试,改动了底层串口调度逻辑,也是绝大多数人踩坑的根源。标准 MicroPython 是主程序读取串口,而 K230 开机第一步,会优先启动IDE 调试后台线程。这是所有问题的开端。
2026-07-18 15:25:20
237
原创 【EF Core】使用自定义的值比较器
在插入数据时,咱们设置的值是 020-55128130,之后我们修改为 (020)55128130,咱们认为这是同一个号码。(\d{3,4}) 这是一个分组,匹配时会把它存储起来,\d 是数字,{3,4} 表示数字的出现次数为最少三次最多四次。Paper 实体类的 Color 属性是 RGBColor 结构类型,而存入数据库时,我们只需要一个 uint 值即可,因此,它需要一个值转换器。抠亮眼睛看清楚呢,属性值确实是变了的,但由于咱们自定义的比较器在作怪,所以,实体的状态依然被标记为 Unchanged。
2026-07-18 15:24:34
156
原创 MySQL 性能调优完全指南:从硬件到 SQL,一篇吃透
阶段核心动作1. 硬件层升级 SSD、增加内存、使用 RAID102. 配置层调整、连接数、日志刷盘策略3. 架构层读写分离、主从半同步、分库分表、引入缓存4. SQL 层开启慢查询日志、分析 EXPLAIN、优化索引、避免全表扫描5. 锁层面减少长事务、合理设计索引、降低隔离级别(若业务允许)最后,记住一条真理:没有任何一次调优是“无脑加配置”能解决的,必须结合业务特点与监控数据,循序渐进。
2026-07-17 14:38:13
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅