我是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