2015-02-20 2 views
1

Новичок здесь! : PCorona SDK - проблема с прозрачностью касания. Событие на физическом теле?

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

Я нарисовал всех животных как круги, затем я добавил к нему круговое физическое тело. Изображения 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); 

ответ

2

Это связано с прямоугольным пространством изображения. попробуйте использовать маску на животных Objet с опцией HIT TEST на (истинный): try this link for masking images

вот пример:

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 
+0

@bardzusny мой плохой. я буду –