Just upgraded to SDK 0.12.0 and noticed a deviation in behavior from 0.11.0 in the lua api's sprite:overlappingSprites
function. Previously, sprites were returned if either sprite collides with the caller (based on groups), whereas now only sprites the caller collides with are returned. Here is a minimum example to reproduce this behavior:
local gfx <const> = playdate.graphics
local spr1 <const> = gfx.sprite.new()
spr1:setCollideRect(0,0,20,20)
spr1:moveTo(10,10)
spr1:setGroups({1})
spr1:setCollidesWithGroups({2})
spr1:add()
local spr2 <const> = gfx.sprite.new()
spr2:setCollideRect(0,0,20,20)
spr2:moveTo(20,20)
spr2:setGroups({2})
spr2:add()
local output = false
function playdate:update()
gfx.sprite.update()
if not output then
local overlaps1 = spr1:overlappingSprites()
local overlaps2 = spr2:overlappingSprites()
print("API version is "..playdate.apiVersion())
print("There are "..#overlaps1.." overlapping sprites for spr1")
print("There are "..#overlaps2.." overlapping sprites for spr2")
output = true
end
end
On 0.11.0, this outputs:
22:46:30: API version is 1100
22:46:30: There are 1 overlapping sprites for spr1
22:46:30: There are 1 overlapping sprites for spr2
However, on 0.12.0, this outputs:
22:45:58: API version is 1200
22:45:58: There are 1 overlapping sprites for spr1
22:45:58: There are 0 overlapping sprites for spr2
The changelog for 0.12.0 includes:
- improve default behavior of sprite collision groups
which might mean this is intentional, especially considering the docs include language like
taking the sprites' groups and collides-with masks into consideration.
when describing the behavior of overlappingSprites
. Still caught my off guard. I fixed my code by simply updating the collision mask for the sprites involved.