You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《以撒的结合:忏悔》Lua模组求助:角色尺寸修改失效问题

问题排查:《以撒的结合:忏悔》模组角色尺寸修改失效问题

问题描述

我是模组开发新手,正在为《The Binding of Isaac Repentance》开发模组,Lua语言对我来说较为陌生。该模组的设计目标是提升角色伤害与尺寸、降低移动速度,目前伤害和速度的修改功能运行正常,但角色尺寸提升功能未生效。

另外,本模组的教程内容感谢YouTube用户catinsurance。

原始代码

local mod = RegisterMod("More food!", 1)
    local clownBurger = Isaac.GetItemIdByName("Clown's Burger!")
    local clownBurgerDamage = 3
    local clownBurgerSpeed = 0.5
    local clownBurgerSize = 100 --tried with 2 at first but nothing really changed
    function mod:EvaluateCacheDmg(player, cacheFlags)
        if cacheFlags & CacheFlag.CACHE_DAMAGE == CacheFlag.CACHE_DAMAGE then 
            local itemCount = player:GetCollectibleNum(clownBurger)
            local damageToAdd = clownBurgerDamage * itemCount
            player.Damage = player.Damage + damageToAdd
            end
        end
    mod:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, mod.EvaluateCacheDmg)
    function mod:EvaluateCacheSpd(player, cacheFlags)
        if cacheFlags & CacheFlag.CACHE_SPEED == CacheFlag.CACHE_SPEED then
            local itemCount = player:GetCollectibleNum(clownBurger)
            local speedToDecrease = clownBurgerSpeed * itemCount
            player.MoveSpeed = player.MoveSpeed - speedToDecrease
            end
        end
    mod:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, mod.EvaluateCacheSpd)
    function mod:EvaluateCacheSize(player, cacheFlags)
        if cacheFlags & CacheFlag.CACHE_SIZE == CacheFlag.CACHE_SIZE then
            local itemCount = player:GetCollectibleNum(clownBurger)
            local sizeToAdd = clownBurgerSize * itemCount
            player.Size = player.Size + sizeToAdd
            end
        end
    mod:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, mod.EvaluateCacheSize)

问题原因与修复方案

核心问题

在《以撒的结合:忏悔》API中,角色尺寸的修改逻辑和伤害、速度存在本质差异:

  1. player.Size是缩放系数(默认值为1.0),而非绝对值。你设置的100会触发游戏的数值上限限制,直接导致修改被忽略;即使设为2,也会因为叠加逻辑错误无法正常生效。
  2. 原代码使用GetCollectibleNum(clownBurger)无法计算道具的叠加效果(比如通过道具复制、卡牌获得的额外层数),必须加上第二个参数true才能统计所有生效的道具数量。

修复后的代码

local mod = RegisterMod("More food!", 1)
local clownBurger = Isaac.GetItemIdByName("Clown's Burger!")
local clownBurgerDamage = 3
local clownBurgerSpeed = 0.5
local clownBurgerSizeMultiplier = 0.2 -- 每次获得道具,尺寸提升20%(默认1.0,叠加后为1.2、1.4...)

-- 合并所有缓存回调,简化逻辑
function mod:EvaluateCache(player, cacheFlags)
    local itemCount = player:GetCollectibleNum(clownBurger, true) -- 第二个参数true统计所有叠加的道具
    if itemCount <= 0 then return end

    -- 处理伤害提升
    if cacheFlags & CacheFlag.CACHE_DAMAGE == CacheFlag.CACHE_DAMAGE then
        player.Damage = player.Damage + clownBurgerDamage * itemCount
    end

    -- 处理移动速度降低,防止数值为负
    if cacheFlags & CacheFlag.CACHE_SPEED == CacheFlag.CACHE_SPEED then
        player.MoveSpeed = player.MoveSpeed - clownBurgerSpeed * itemCount
        player.MoveSpeed = math.max(player.MoveSpeed, 0.1) -- 限制最低速度为0.1
    end

    -- 处理尺寸缩放,基于默认值叠加增量
    if cacheFlags & CacheFlag.CACHE_SIZE == CacheFlag.CACHE_SIZE then
        player.Size = 1.0 + clownBurgerSizeMultiplier * itemCount
        player.Size = math.min(player.Size, 3.0) -- 限制最大尺寸为3倍默认值
    end
end
mod:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, mod.EvaluateCache)

关键修改点说明

  • 将尺寸修改从绝对值改为百分比增量,0.2代表每次获得道具提升20%尺寸,数值更合理,不会触发游戏的异常限制。
  • 使用player:GetCollectibleNum(clownBurger, true)确保统计所有生效的道具层数,包括复制道具、卡牌等带来的叠加效果。
  • 合并三个独立的缓存回调为一个,减少冗余代码,逻辑更清晰。
  • 增加速度和尺寸的数值限制,避免出现负速度或过大尺寸导致的游戏异常。

额外测试提示

  • 测试时可以临时将clownBurgerSizeMultiplier改为0.5(每次提升50%),更容易直观看到尺寸变化效果。
  • 若需要同步调整角色碰撞箱大小(而非仅视觉尺寸),游戏会自动基于player.Size调整基础碰撞箱;如果需要自定义碰撞箱,可以额外修改player.HitboxWidth和player.HitboxHeight参数。

内容的提问来源于stack exchange,提问作者Alex_Vargas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:25:16