Corona SDK - проблема с сенсорной прозрачностью. Событие на физическом теле?

Новичок здесь! :П

Я пытаюсь создать игру в Corona, в которой животные падают с верхней части экрана и продолжают подпрыгивать. Когда вы прикасаетесь к животному, оно исчезает.

Я нарисовал всех животных в виде кругов, а затем добавил к ним круглое физическое тело. Изображения в формате PNG с прозрачностью.

Проблема в том, что некоторые детали животных, такие как уши и лапы, находятся за пределами физического тела (чего я и хочу, потому что так кажется лучше столкновение). Более того, когда я прикасаюсь к изображению животного снаружи, иногда оно нажимается на альфа-область моего изображения, и это считается нажатием, но на самом деле я не касался животного.

Я хотел бы, чтобы он исчез, когда я нажимаю только на область его физического тела.

Кто-нибудь знает, как с этим справиться? Есть ли способ добавить обработчик касания для физического тела? (Столкновение работает довольно хорошо, это просто касание, связанное с изображением, а не с физическим телом).

local rect = display.newImage("img/Animals/cow_a1.png");
rect.x = 60 + math.random( 160 )
rect.y = -100
physics.addBody( rect, { density=9, friction=0.3, bounce=0.3,radius=27} )
function rect:touch(e)
            -- Remove the animals from screen and memory
            removeAnimal(self);
end
-- Add event listener to the cow
rect:addEventListener("touch", rect);

person Guilherme Oliveira    schedule 20.02.2015    source источник


Ответы (1)


Это из-за прямоугольного пространства изображения. попробуйте использовать MASK на объекте животного с включенной опцией HIT TEST (true): попробуйте эту ссылку для маскировки изображений

вот пример:

local displayGroupTmp = display.newGroup( )
    displayGroupTmp.id = id + 1
    -- creating a slice
    local circleSize = Constants.screenX*3.8/4 - 20
    local background = display.newImageRect( displayGroupTmp, "images/slice.png", circleSize/2, circleSize*1.5/2 )
    background.anchorX = 0
    background.anchorY = 0.66
    background.x = Constants.screenX/2 + deltaX
    background.y = Constants.screenY/2 + deltaY
    background:setFillColor( color[1], color[2], color[3] )
    -- setting mask of an object to identify the true bounding of the background
    local mask = graphics.newMask( "images/sliceMask.png" )
    -- mask.anchorX = 0
    background.maskX = background.x
    background.maskY = background.y
    background:setMask( mask )
    background.maskScaleX, background.maskScaleY = 0.38,0.38
    background.isHitTestMasked = true
person Mohammad Ali Saatchi    schedule 23.05.2015
comment
@bardzusny мой плохой. я буду - person Mohammad Ali Saatchi; 24.05.2015