电晕停止物体被拖出屏幕

时间:2013-02-11 12:13:31

标签: lua corona

我有多个可拖动的对象可以在屏幕上移动。我想设置一个边界,以便它们不能被拖出屏幕。我无法真正找到我想要做的事情。

2 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点。

您可以将一些静态物理主体设置为墙(位于屏幕边缘之外),并将动态物理主体附加到可拖动对象。如果您不希望多个可拖动对象相互碰撞,则需要设置自定义碰撞过滤器。

最简单的方法(假设您的对象不是物理对象)是将所有可拖动项放入表中。然后在运行时侦听器中,不断检查对象的x和y位置。 E.g

object1 = display.newimage.....

local myObjects = {object1, object2, object3}

local minimumX = 0
local maximumX = display.contentWidth
local minimumY = 0
local maximumY = display.contentHeight

local function Update()

    for i = 1, #myObjects do

        --check if the left edge of the image has passed the left side of the screen
        if myObjects[i].x - (myObjects[i].width * 0.5) < minimumX then
            myObjects[i].x = minimumX

        --check if the right edge of the image has passed the right side of the screen
        elseif myObjects[i].y + (myObjects[i].width * 0.5) > maximumX then
            myObjects[i].x = maximumX

        --check if the top edge of the image has passed the top of the screen
        elseif myObjects[i].y - (myObjects[i].height * 0.5) < minimumY then
            myObjects[i].y = minimumY

        --check if the bottom edge of the image has passed the bottom of the screen
        elseif myObjects[i].x + (myObjects[i].height * 0.5) > maximumY then
            myObjects[i].y = maximumY
        end

    end
end

Runtime:addEventListener("enterFrame", Update)

该循环假定图像的参考点位于中心,如果不是,则需要调整它。

答案 1 :(得分:1)

我还想添加那些需要更多或更远离屏幕的人,你需要对代码进行以下调整(请记住Gooner&#39; s切换&#34;&gt;&lt;&#34;围绕评论我还重命名了一些变量(minimumX / maximumX到tBandStartX / tBandEndX),请记住这一点。

-- Create boundry for tBand

local tBandStartX = 529
local tBandEndX = -204

    local function tBandBoundry()
            --check if the left edge of the image has passed the left side of the screen
            if tBand.x  > tBandStartX then
                tBand.x = tBandStartX

            --check if the right edge of the image has passed the right side of the screen
            elseif tBand.x < tBandEndX then
                tBand.x = tBandEndX
            end
    end

    Runtime:addEventListener("enterFrame", tBandBoundry)

谢谢你,TheBestBigAl,帮助我达到我需要的功能!

-Robbie