如何防止对象移动超过某一点

我想知道是否有一种方法可以防止对象移出屏幕。在我的代码中,我有一个可控制的角色(玩家),我希望当其x坐标小于1时防止其向左移动。

我尝试在下面的代码中实现这一点,但是,如果您按住左箭头键,玩家将不会停止移动。

有没有办法解决这个问题?如果我猜的话,我需要一直检查当player.x小于1的情况。

motionx = 0; -- 用于沿x轴移动角色的变量
speed = 10; -- 设置行走速度

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 )
点赞
用户2858170
用户2858170

检测物体是否超出屏幕范围

实现一个函数,在物体到达屏幕边缘时停止它。

为了在每一帧检测物体位置,将你的函数作为事件监听器添加到事件 "enterFrame"。

查看以下文档了解详情: https://docs.coronalabs.com/guide/events/detectEvents/index.html

当然,你也可以通过围绕屏幕放置无形墙体来使用碰撞引擎,使物体在撞到边界时反弹。

2016-05-09 10:48:03
用户3041972
用户3041972

你的答案相当接近,但可能需要整个代码来测试它。我只更改了这个代码:player.x < 1并将其移动)

motionx = 0; -- 用于沿x轴移动角色的变量
speed = 10; -- 设置行走速度

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 )

2016-05-09 13:44:24
用户6312494
用户6312494

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

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

local motionx = 0; -- 用于沿x轴移动角色的变量
local speed = 10; -- 设置步行速度

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 )
2016-05-09 21:56:56