Love2D 11.3中beginCollision回调参数异常:Fixture与Contact错位
Love2D 11.3 碰撞回调参数异常问题解决
问题根源在于回调方法的绑定逻辑:你用冒号语法定义了thisScene:contact方法,这类方法默认第一个参数是self(当前场景实例),但直接将self.contact传给GameWorld:setCallbacks时,Love2D调用回调不会自动注入self,导致参数顺序完全错位——原本的第一个Fixture被当作self传入方法,第二个Fixture变成参数a,Contact对象变成参数b,参数coll因此为nil。
两种修复方案:
方案1:用匿名函数包装回调,手动传入self
修改回调设置代码,通过匿名函数确保self被正确传入:
GameWorld = love.physics.newWorld(0, 0, true) GameWorld:setCallbacks(function(a, b, coll) self:contact(a, b, coll) end)
方案2:改为点语法定义contact方法(无需场景实例时使用)
如果contact方法不需要访问场景的成员变量,可以改成点语法定义,避免self参数干扰:
function thisScene.contact(a, b, coll) print(a, b, coll) end
此时直接传递thisScene.contact给setCallbacks即可正常接收参数。
修复后,print(a, b, coll)会输出两个Fixture对象和一个Contact对象,与预期一致。
内容的提问来源于stack exchange,提问作者Jackson Kidwell
相关产品推荐
相关产品推荐

