我有多个可以在屏幕上移动的可拖动对象。我想设置一个边界,这样它们就不能被拖出屏幕。我真的找不到我想要做的事情。
问问题
2447 次
2 回答
5
有几种方法可以做到这一点。
您可以将一些静态物理体设置为墙(就在屏幕边缘之外),并将动态物理体附加到您的可拖动对象。如果您不希望多个可拖动对象相互碰撞,则需要设置自定义碰撞过滤器。
最简单的方法(假设您的对象还不是物理对象)是将所有可拖动项目放入表格中。然后在运行时侦听器中,不断检查对象的 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
--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)
该循环假定图像的参考点位于中心,如果不是,则需要对其进行调整。
于 2013-02-11T13:05:02.387 回答
1
我还想为那些需要他们的对象更多或更多离屏的人添加,你需要对代码进行以下调整(请记住 Gooner 在评论周围切换“><”)我也重命名了一些变量(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 帮助我使用此功能到达需要的位置!
-罗比
于 2014-03-20T02:59:14.000 回答