资讯动态

REPENTOGON 枚举详解:KnifeSubType 飞刀子类型定义与实战用法

发布时间:2026/10/16 2:54:50 来源:尧图企业网站定制
游戏开发插件系统【免费下载链接】REPENTOGONScript extender for The Binding of Isaac: Repentance项目地址https://gitcode.com/gh_mirrors/re/REPENTOGON点击查看免费下载KnifeSubType 是 REPENTOGON 为《以撒的结合忏悔》The Binding of Isaac: Repentance脚本扩展定义的一组实体子类型枚举用于区分游戏内EntityKnife飞刀实体实体类型EntityType.ENTITY_KNIFE值为 8的不同行为形态。本文以 docs/docs/enums/KnifeSubType.md 为骨架结合仓库源码完整说明每个枚举值的含义、底层实现与在MC_PRE_KNIFE_COLLISION等回调中的过滤用法帮助 Mod 作者在编写飞刀相关逻辑时做出正确的判断与过滤。枚举定义总览KnifeSubType是一个整数型枚举完整定义如下ValueEnumeratorComment0DEFAULT默认飞刀1PROJECTILE投射物式飞刀自带寻路路径3YES_MOTHER与“妈妈Mother”战斗机制相关的飞刀4CLUB_HITBOX近战武器“挥击”产生的判定框hitbox该枚举在仓库中有两处权威来源内容完全一致文档定义docs/docs/enums/KnifeSubType.mdLua 侧枚举repentogon/resources/scripts/enums_ex.lua第 791–796 行enums_ex.lua中的实际定义KnifeSubType { DEFAULT 0, PROJECTILE 1, YES_MOTHER 3, CLUB_HITBOX 4, }注意枚举值存在跳号值 2 未出现在文档与enums_ex.lua中说明该值在游戏中并未被占用或对外暴露Mod 代码中不应使用 2 作为有效的KnifeSubType。各枚举值的语义与源码依据DEFAULT0默认飞刀DEFAULT是KnifeSubType的默认值值为 0对应游戏中最普通的飞刀形态例如由道具生成的常规飞刀。它是其他子类型的“基准形态”也是大多数飞刀实体的默认状态。PROJECTILE1投射物式飞刀PROJECTILE表示“投射物式”飞刀这类飞刀依赖一条寻路路径homing path驱动运动。从源码看该类飞刀在初始化时会调用Entity_Knife::InitHomingPath计算路径repentogon/LuaInterfaces/Entities/LuaEntityKnife.cpp 中Lua_InitHomingPath暴露了knife:InitHomingPath(Direction, Source)接口注释明确指出该接口用于 homing 飞刀或KnifeSubType.PROJECTILEsubtype 1飞刀的路径重新计算(Re)calculates the path used for homing knives or projectile knives (subtype 1;KnifeSubType.PROJECTILE).底层函数签名定义在 libzhl/functions/EntityKnife.zhlEntity_Knife::InitHomingPath(Vector direction, Entity* source, float pathOffset)。PROJECTILE飞刀还有一个重要的历史修复。仓库 repentogon/Patches/MiscFixes.cpp第 275–288 行中专门有一段修复注释与挂钩代码SubType 1 knives crash during Update if the HomingLaser stuff isnt initialized (like if a mod spawns one).即当 Mod 直接生成 subtype 1 的飞刀时如果其 HomingLaser 相关数据未被初始化会在Update阶段崩溃。REPENTOGON 通过挂钩LuaEngine::PostKnifeInit在该类飞刀初始化后立即以直线路径调用InitHomingPath兜底避免崩溃之后若 Mod 再次调用InitHomingPath重新计算路径则会被干净地覆盖。同一修复也记录在 changelog.txtKnives spawned as KnifeSubType.PROJECTILE (1) will no longer crash the game.实战提示Mod 自行Isaac.Spawn生成KnifeSubType.PROJECTILE飞刀时建议主动调用一次InitHomingPath指定方向与来源以获得可控的运动轨迹而非依赖兜底直线路径。YES_MOTHER3妈妈战斗机制飞刀YES_MOTHER值为 3从命名上推断与最终 Boss“妈妈Mother”的战斗演出相关属于游戏内部机制使用的子类型在 docs/docs/EntityKnife.md 及源码中均未进一步暴露公开接口。对 Mod 而言它的实际用途是在碰撞/更新回调中区分出这类由 Boss 机制生成的飞刀避免误判为玩家道具飞刀。CLUB_HITBOX4近战武器判定框CLUB_HITBOX是近战武器Bone Club、Spirit Sword 等“挥击”动作所生成的特殊飞刀判定框。它与“主飞刀”main knife之间通过一个专属引用关联REPENTOGON 为此提供了两个 Lua 接口实现在 repentogon/LuaInterfaces/Entities/LuaEntityKnife.cppknife:GetHitboxParentKnife()对KnifeSubType.CLUB_HITBOX判定框返回其所属近战武器的“主”EntityKnife对非判定框飞刀或通过其他方式生成的判定框返回nil。knife:SetHitboxParentKnife(Knife)手动设置GetHitboxParentKnife的返回值。文档 docs/docs/EntityKnife.md 明确说明该引用不影响任何原版逻辑仅为 Mod 便利而提供请妥善使用。底层实现中该引用保存在EntityKnifePlus扩展结构的hitboxSource字段由 repentogon/Patches/EntityPlus.cpp 中的ENTITY_KNIFE分支挂接读取时校验目标实体的类型为ENTITY_KNIFE后才返回。实战场景当你在MC_PRE_KNIFE_COLLISION/MC_POST_KNIFE_COLLISION中处理碰撞时可以用GetHitboxParentKnife把近战判定框与武器本体关联起来从而精确判断“是谁的武器命中了谁”。在 ModCallbacks 回调中按子类型过滤KnifeSubType最重要的实战价值是作为飞刀相关回调的过滤参数。在 docs/docs/enums/ModCallbacks.md 中以下回调的可选参数Optional Args均为KnifeSubTypeID回调名函数参数可选参数过滤用返回类型53MC_PRE_KNIFE_COLLISION(EntityKnife Knife, Entity Collider, boolean Low)KnifeSubTypeboolean或table1243MC_POST_KNIFE_COLLISION(EntityKnife Knife, Entity Collider, boolean Low)KnifeSubTypevoid1165MC_PRE_KNIFE_UPDATE(EntityKnife Knife)KnifeSubTypeboolean也就是说注册回调时传入KnifeSubType枚举值即可让回调只针对特定形态的飞刀触发。典型用法-- 只响应“投射物式飞刀”的碰撞前回调 mod:AddCallback(ModCallbacks.MC_PRE_KNIFE_COLLISION, function(_, knife, collider, low) -- 只有 subtype 1 的飞刀会进入这里 return false end, KnifeSubType.PROJECTILE) -- 只响应近战武器判定框的更新回调 mod:AddCallback(ModCallbacks.MC_PRE_KNIFE_UPDATE, function(_, knife) local parent knife:GetHitboxParentKnife() if parent ~ nil then -- 关联到挥击武器的本体 end return false end, KnifeSubType.CLUB_HITBOX)其中MC_PRE_KNIFE_COLLISION还支持返回一个table来精细控制碰撞行为详见 docs/docs/enums/ModCallbacks.mdCollide设为true强制实体发生物理碰撞推开彼此除非“碰撞者”忽略碰撞设为false忽略物理碰撞而不必跳过碰撞效果。SkipCollisionEffects设为true跳过该实体的碰撞后果代码如碰撞伤害不影响物理碰撞也不会跳过“碰撞者”的碰撞代码。源码级调用链参考以下是编写飞刀相关 Mod 时可进一步查阅的仓库文件均以仓库根目录为基准用途文件枚举文档docs/docs/enums/KnifeSubType.mdLua 侧枚举定义repentogon/resources/scripts/enums_ex.luaEntityKnife类接口文档docs/docs/EntityKnife.mdLua 接口实现InitHomingPath、Get/SetHitboxParentKnife、命中列表等repentogon/LuaInterfaces/Entities/LuaEntityKnife.cppPROJECTILE飞刀崩溃修复repentogon/Patches/MiscFixes.cppEntity_Knife内存结构定义libzhl/functions/EntityKnife.zhl回调注册与分发碰撞/更新挂钩repentogon/LuaInterfaces/CustomCallbacks.cpp飞刀实体类型常量ENTITY_KNIFE 8libzhl/functions/Global.zhl注意事项小结跳号问题KnifeSubType只定义 0、1、3、4 四个值值 2 未使用判断子类型时应使用枚举名而非连续整数假设。PROJECTILE飞刀必须初始化路径Mod 直接生成 subtype 1 飞刀时REPENTOGON 会兜底初始化直线路径防止崩溃但建议主动调用InitHomingPath获得预期轨迹。CLUB_HITBOX是判定框而非武器本体通过GetHitboxParentKnife/SetHitboxParentKnife关联主飞刀该关联不影响原版逻辑仅用于 Mod 内部逻辑。回调过滤三个飞刀相关回调53 / 1243 / 1165均可将KnifeSubType作为可选参数是最简洁的按形态分流手段。赞分享游戏开发插件系统【免费下载链接】REPENTOGONScript extender for The Binding of Isaac: Repentance项目地址https://gitcode.com/gh_mirrors/re/REPENTOGON点击查看免费下载相关推荐使用 Pyro 的 pyro.contrib.epidemiology 构建传染病舱室模型从 SVI/HMC 推断到轨迹预测与远期预报使用 Pyro 的 pyro.contrib.epidemiology 构建传染病舱室模型从 SVI/HMC 推断到轨迹预测与远期预报 pyro.contri游戏开发插件系统REPENTOGON 中 WeaponModifier 枚举详解武器修饰位掩码的定义、Lua 用法与源码实现REPENTOGON 中 WeaponModifier 枚举详解武器修饰位掩码的定义、Lua 用法与源码实现 本文围绕 REPENTOGON 的 Weapon游戏开发插件系统TypeScript枚举类型详解数字枚举与字符串枚举的完整用法TypeScript枚举类型详解数字枚举与字符串枚举的完整用法 TypeScript枚举类型是TypeScript中一个强大的特性它允许我们定义一组命名的常文档教程上一篇3分钟搞定Django复杂表单调试django-debug-toolbar自定义表单控件全指南下一篇gsd-2 的 UI/UX 规则模板规范为 userinterface-wiki skill 编写结构统一的规则文件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑