Love2D物理不会触发碰撞回调

时间:2020-06-27 19:50:46

标签: lua love2d physics-engine

我是Love2D编程的新手,所以答案可能就在我的鼻子底下。

我正在尝试为游戏编写碰撞测试,其中涉及一个动态“玩家”对象(唯一具有碰撞功能的设备),该对象在没有重力的世界中以固定的线速度运动。屏幕中心是一个静态磁盘。当播放器进入光盘时,其线速度应设置为更高的值。

但是,根本没有调用任何碰撞回调。模拟运行没有错误,但播放器不会改变速度。我尝试了其他碰撞功能(例如在控制台中打印文本,更改回调功能),但没有一个被调用。我还以与教程游戏相同的格式设置了碰撞回调代码,并且检测确实没有问题。

这是代码文件

--world.lua
local function begincon(fa, fb, col) 
    local enta = fa:getUserData()
    local entb = fb:getUserData()
    if enta.begcon then enta:begcon() end
    if entb.begcon then entb:begcon() end
end

local function endcon(fa, fb, col) end

local function presol(fa, fb, col) end

local function postsol(fa, fb, col) end

local wld = love.physics.newWorld(0, 0, false)

wld:setCallbacks(begincon, nil, nil, nil)

return wld
--player.lua

local wld = require('world')
local state = require('state')
local bit = require('bit')

return function(pox, poy)
    local player = {}
    player.body = love.physics.newBody(wld, pox, poy, 'dynamic')
    player.body:setLinearVelocity(-100, 0)
    player.body:setMass(50)
    player.shape = love.physics.newRectangleShape(10, 20)
    player.fixt = love.physics.newFixture(player.body, player.shape)
    player.cat = tonumber('1000', 2)
    player.msk = tonumber('0011', 2)
    player.fixt:setFilterData(player.cat, player.msk, 0)
    player.fixt:setUserData(player)

function player.begcon(self) --supposed to resolve collision
    self.body:setLinearVelocity(-200, 0)
end
end

0 个答案:

没有答案