如何在 Corona SDK 中创建屏幕顶部和底部的不可触摸区域?

  1. 如果我触摸到顶部(比如,y=5),则当对象到达 y=50 时应停止移动
  2. 如果我触摸到底部(比如 y=300),则当对象到达 y=250 时应停止移动

以下是我目前所做的:

local function movePlayer(event)
    if(event.phase == "ended") then
        transition.to(player, {y=event.y, time=3000})
    end
 end

我该如何实现它?

点赞
用户5312361
用户5312361

这个问题很容易通过简单的比较逻辑解决,添加这个函数并使用你喜欢的参数(比如 player 的 x 和 y),在应用到 player 前限制它们的值。

这个函数接受三个参数:数字值、低限制和高限制。它返回一个数字,保证在这些范围内。

以下是函数本身:

function math.clamp(value, low, high)
    if low and value <= low then
        return low
    elseif high and value >= high then
        return high
    end
    return value
end

使用示例:

local actualSpeed = math.clamp(calculatedSpeed, 0, 200)

local temperature = math.clamp(temperature, -270)

player.x = math.clamp(player.x, 0, map.width)

cannon.rotation = math.clamp(cannon.rotation, -90, 90)

local age = math.clamp(age, 1, 120)

-- 六有比任何其他数字更高的概率。
local luckyDice = math.clamp(math.random(1, 10), nil, 6)

阅读更多

编辑:

local backGround = display.newRect(display.actualContentWidth/2,display.actualContentHeight/2,display.actualContentWidth,display.actualContentHeight)
backGround:setFillColor( 0.5, 0.5, 0.5, 1.0 )

local player = display.newCircle(100,100,50)

function math.clamp(value, low, high)
    if low and value <= low then
        return low
    elseif high and value >= high then
        return high
    end
    return value
end

function movePlayer(event)
    if(event.phase == "moved") then
        local xPosition = event.x
        local yPosition = event.y

        xPosition =  math.clamp(xPosition, 0, 150)
        yPosition =  math.clamp(yPosition, 0, 150)

        transition.to(player, {x=xPosition,y=yPosition,time = 30})

    end
 end

player.touch = movePlayer

player:addEventListener( "touch", movePlayer )
backGround:addEventListener( "touch", movePlayer )
2016-04-04 18:34:25