如何阻止物体移动超过一个点

How to stop an object from moving past a point

我想知道是否有办法阻止对象离开屏幕。在我的代码中,我有一个可控角色(玩家),我想防止它在 x 坐标 < 1

时向左移动

我尝试在下面的代码中这样做,但是,如果您按住左箭头键,播放器不会停止。

有办法解决这个问题吗?如果我有猜测,我会以某种方式需要我的程序不断检查 player.x < 1

的情况
motionx = 0; -- Variable used to move character along x axis
speed = 10; -- Set Walking Speed


local function moveplayer (event)
    player.x = player.x + motionx;
end

Runtime:addEventListener("enterFrame", moveplayer)

local function onKeyEvent( event )
    if ( event.phase == "down" ) then
        if ( event.keyName == "left" ) and player.x > 1 then
            motionx = -speed
            return true
        elseif ( event.keyName == "right" ) then
            motionx = speed
            return true
        end
    end
end

Runtime:addEventListener( "key", onKeyEvent )

只需实现一个功能来检查您的对象位置与屏幕边界。每当它到达屏幕边界时,您就会停止它。

要检查每一帧的对象位置,请将您的函数添加为事件的事件侦听器 "enterFrame"。

阅读此内容了解详情: https://docs.coronalabs.com/guide/events/detectEvents/index.html

当然,您也可以通过在屏幕周围放置隐形墙来使用碰撞引擎,这样您的对象就会在碰到边界时弹回。

您已经相当接近了,但可能需要您的整个代码来测试它。我只更改了这个 player.x < 1 并移动了 )

motionx = 0; -- Variable used to move character along x axis
speed = 10; -- Set Walking Speed


local function moveplayer (event)
    player.x = player.x + motionx;
end

Runtime:addEventListener("enterFrame", moveplayer)

local function onKeyEvent( event )
    if ( event.phase == "down" ) then
        if ( event.keyName == "left"  and player.x < 1) then
            motionx = -speed
            return true
        elseif ( event.keyName == "right" ) then
            motionx = speed
            return true
        end
    end
end

运行时:addEventListener("key",onKeyEvent)

您需要检查边界并将 motionx 设置为零:

local player = display.newCircle(display.contentCenterX, display.contentCenterY, 10)

local motionx = 0; -- Variable used to move character along x axis
local speed = 10; -- Set Walking Speed

local function moveplayer( event )
    player.x = player.x + motionx;
    if player.x < 0 then
        player.x = 0
        motionx = 0
    elseif player.x > display.contentWidth then
        player.x = display.contentWidth
        motionx = 0
    end
end

Runtime:addEventListener( "enterFrame", moveplayer )

local function onKeyEvent( event )
    if event.phase == "down" then
        if event.keyName == "left" then
            motionx = -speed
            return true
        elseif event.keyName == "right" then
            motionx = speed
            return true
        end
    end
end

Runtime:addEventListener( "key", onKeyEvent )