如何阻止物体移动超过一个点
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 )
我想知道是否有办法阻止对象离开屏幕。在我的代码中,我有一个可控角色(玩家),我想防止它在 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 )