【问题标题】:How to stop an object from moving past a point如何阻止物体移过一个点
【发布时间】:2016-05-10 05:56:56
【问题描述】:

我想知道是否有办法阻止物体移出屏幕。在我的代码中,我有一个可控角色(玩家),我想防止它在 x 坐标为 时向左移动

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

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

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 )

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    您需要检查边界并将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 )
    

    【讨论】:

      【解决方案2】:

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

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

      阅读本文了解详情: https://docs.coronalabs.com/guide/events/detectEvents/index.html

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

      【讨论】:

        【解决方案3】:

        你已经很接近了,但可能需要你的整个代码来测试它。我只更改了这个 player.x

        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)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-09
          • 1970-01-01
          • 2012-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多