Corona停止对象被拖出屏幕。

我有多个可拖动的对象,可以在屏幕上移动。我想设置一个边界,使它们无法被拖出屏幕。我找不到实现这个目标的方法。

点赞
用户1182532
用户1182532

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

你可以设置一些静态的物理体作为墙壁(就在屏幕边缘的外面),并将动态的物理体附加到你的可拖动对象上。如果你不想让多个可拖动对象相互碰撞,你需要设置自定义碰撞过滤器。

最简单的方法(假设你的对象还不是物理对象)是将所有可拖动的物件放入一个表中。然后在一个运行时听众中,不断检查你的物件的x和y位置。例如

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

        --检查图像的左边缘是否已经越过了屏幕的左侧
        if myObjects[i].x - (myObjects[i].width * 0.5) < minimumX then
            myObjects[i].x = minimumX

        --检查图像的右边缘是否已经越过了屏幕的右侧
        elseif myObjects[i].y + (myObjects[i].width * 0.5) > maximumX then
            myObjects[i].x = maximumX

        --检查图像的顶边缘是否已经越过了屏幕的顶部
        elseif myObjects[i].y - (myObjects[i].height * 0.5) < minimumY then
            myObjects[i].y = minimumY

        --检查图像的底边缘是否已经越过了屏幕的底部
        elseif myObjects[i].x + (myObjects[i].height * 0.5) > maximumY then
            myObjects[i].y = maximumY
        end

    end
end

Runtime:addEventListener("enterFrame", Update)

这个循环假定你的图像的参考点在中心,如果它们不在中心,你需要进行调整。

2013-02-11 13:05:02
用户1162164
用户1162164

我还想补充一点,对于那些需要将其对象放到更远或更远的屏幕之外的人,您需要对以下代码进行调整(请记住Gooner切换"> < "的注释)我还将一些变量(minimumX/maximumX更改为tBandStartX/tBandEndX),请记住。

-- 创建tBand的边界

local tBandStartX = 529
local tBandEndX = -204

    local function tBandBoundry()
            --检查图片的左侧是否已经超过了屏幕的左侧
            if tBand.x  > tBandStartX then
                tBand.x = tBandStartX

            --检查图片的右边是否已经超过了屏幕的右边
            elseif tBand.x < tBandEndX then
                tBand.x = tBandEndX
            end
    end

    Runtime:addEventListener("enterFrame", tBandBoundry)

谢谢TheBestBigAl帮助我完成这个功能!

-Robbie

2014-03-20 02:59:14