Lua 角色在滑出方向键后继续移动

Lua 角色在滑出方向键后继续移动,lua,coronasdk,Lua,Coronasdk,我正在制作一款类似马里奥兄弟的平板游戏,我遇到了一个大问题。我的问题是,当我点击方向键并将其拖出时,角色会继续移动,尽管我已经释放了点击。我已经在Corona论坛上发布了这个问题,我还没有找到解决方案 这是我的密码: local function makeControls(event) if anim.isJumping == false then if event.phase == "began" then if event.target.isPressed == false th

我正在制作一款类似马里奥兄弟的平板游戏,我遇到了一个大问题。我的问题是,当我点击方向键并将其拖出时,角色会继续移动,尽管我已经释放了点击。我已经在Corona论坛上发布了这个问题,我还没有找到解决方案

这是我的密码:

local function makeControls(event)
if anim.isJumping == false then
  if event.phase == "began" then
    if event.target.isPressed == false then
      if event.target.id == "left" then
        walk(-1)
      elseif event.target.id == "right" then
        walk(1)
      end
    end
    event.target.isPressed = true
  elseif ( event.phase == "moved" and event.target.isPressed == true ) then
      if (
          event.x > event.target.contentBounds.xMin+4 and
          event.x < event.target.contentBounds.xMax-4 and
          event.y > event.target.contentBounds.yMin+4 and
          event.y < event.target.contentBounds.yMax-4
      ) then
          event.target:dispatchEvent( { name="touch", phase="began", target=event.target } )
        else
          event.target:dispatchEvent( {name = "touch", phase = "ended", target = event.target } )
      end
  elseif event.phase == "ended" then
    anim:setLinearVelocity(0,0)
    event.target.isPressed = false
  end
end
return true
end

  local function createArrowKey(group, x, y, rotation, name)
     local newButtonBoundary = display.newRoundedRect(group, x, y, 75, 75, 12)
     newButtonBoundary.strokeWidth = 6
     newButtonBoundary:setStrokeColor(1, 1, 1, 0.5)
     newButtonBoundary:setFillColor(1, 1, 1, 0.2)
     newButtonBoundary.id = name
     newButtonBoundary:addEventListener("touch", makeControls)
     newButtonBoundary.isPressed = false
     local newArrow = display.newPolygon(group, x, y, { 0, -24, 24, 24, -24, 24 })
     newArrow.rotation = rotation
     newArrow.strokeWidth = 3
  end

  createArrowKey(parent2, left + fullw / 3, bottom - fullh / 5.5, 90, "right")
  createArrowKey(parent2, left + fullw / 5.5, bottom - fullh / 5.5, 270, "left")
  createArrowKey(parent2, left + fullw / 3.88, bottom - fullh / 8.5, 180, "down")
  createArrowKey(parent2, left + fullw / 3.88, bottom - fullh / 3.9, 0, "up")
  createButton(parent2, left + fullw - 150, bottom - fullh / 5.5, "Shoot", "shoot")
  createButton(parent2, left + fullw - 250, bottom - fullh / 5.5, "Throw", "throw")
  createButton(parent2, left + fullw - 350, bottom - fullh / 5.5, "Melee", "melee")
本地函数makeControls(事件)
如果anim.isJumping==false,则
如果event.phase==“开始”,则
如果event.target.isPressed==false,则
如果event.target.id==“left”,则
步行(-1)
elseif event.target.id==“正确”,然后
步行(1)
结束
结束
event.target.isPressed=true
elseif(event.phase==“moved”和event.target.isPressed==true),然后
如果(
event.x>event.target.contentBounds.xMin+4和
event.xevent.target.contentBounds.yMin+4和
event.y
我对科罗纳不太熟悉,但也许我能帮你

if event.phase == "began" then
    if event.target.isPressed == false then
      if event.target.id == "left" then
        walk(-1)
      elseif event.target.id == "right" then
        walk(1)
      end
    end
    event.target.isPressed = true
因此,如果您触摸屏幕,将出现一个触摸事件,其阶段=“开始”

根据您触摸的按钮的不同,您将向左或向右移动,并且您将记住该特定按钮现在已按下

elseif ( event.phase == "moved" and event.target.isPressed == true ) then
      if (
          event.x > event.target.contentBounds.xMin+4 and
          event.x < event.target.contentBounds.xMax-4 and
          event.y > event.target.contentBounds.yMin+4 and
          event.y < event.target.contentBounds.yMax-4
      ) then
          event.target:dispatchEvent( { name="touch", phase="began", target=event.target } )
        else
          event.target:dispatchEvent( {name = "touch", phase = "began", target = event.target } )
      end
我相信当你的手指离开按钮时,你应该在else块中发送一个“touch”“end”事件


这可能会解决您的问题。很遗憾,我无法测试建议的解决方案。

我会尝试不生成新事件:

    local function makeControls(event)
if anim.isJumping == false then
  if event.phase == "began" then
    if event.target.isPressed == false then
      if event.target.id == "left" then
        walk(-1)
      elseif event.target.id == "right" then
        walk(1)
      end
    end
    event.target.isPressed = true
  elseif ( event.phase == "moved" and event.target.isPressed == true ) then
      if (
          event.x > event.target.contentBounds.xMin+4 and
          event.x < event.target.contentBounds.xMax-4 and
          event.y > event.target.contentBounds.yMin+4 and
          event.y < event.target.contentBounds.yMax-4
      ) then
          if event.target.id == "left" then
            walk(-1)
          elseif event.target.id == "right" then
            walk(1)
          end
        else
         anim:setLinearVelocity(0,0)
        event.target.isPressed = false
      end
  elseif event.phase == "ended" then
    anim:setLinearVelocity(0,0)
    event.target.isPressed = false
  end
end
return true
end
本地函数makeControls(事件)
如果anim.isJumping==false,则
如果event.phase==“开始”,则
如果event.target.isPressed==false,则
如果event.target.id==“left”,则
步行(-1)
elseif event.target.id==“正确”,然后
步行(1)
结束
结束
event.target.isPressed=true
elseif(event.phase==“moved”和event.target.isPressed==true),然后
如果(
event.x>event.target.contentBounds.xMin+4和
event.xevent.target.contentBounds.yMin+4和
event.y
谢谢您的帮助。但是,当我在else块中添加结束阶段时,也会发生相同的情况。另外,我不小心将以前版本的代码放置在else阶段有开始阶段分派的地方。可能尝试。我尝试过,但我无法使左右移动正常工作。为什么左右移动不正常?因为在我以滑动方式松开按钮后,尽管我松开了按钮,但角色仍将继续移动。所以,也许你移动角色的方式有问题。您不显示
walk
函数。同样的情况也会发生。顺便说一下,这是布伦特·索伦蒂诺的密码,他说他正在研究解决方案。(他把这个作为科罗纳的教程)还有,你是波兰人?是的,我是波兰人。
    local function makeControls(event)
if anim.isJumping == false then
  if event.phase == "began" then
    if event.target.isPressed == false then
      if event.target.id == "left" then
        walk(-1)
      elseif event.target.id == "right" then
        walk(1)
      end
    end
    event.target.isPressed = true
  elseif ( event.phase == "moved" and event.target.isPressed == true ) then
      if (
          event.x > event.target.contentBounds.xMin+4 and
          event.x < event.target.contentBounds.xMax-4 and
          event.y > event.target.contentBounds.yMin+4 and
          event.y < event.target.contentBounds.yMax-4
      ) then
          if event.target.id == "left" then
            walk(-1)
          elseif event.target.id == "right" then
            walk(1)
          end
        else
         anim:setLinearVelocity(0,0)
        event.target.isPressed = false
      end
  elseif event.phase == "ended" then
    anim:setLinearVelocity(0,0)
    event.target.isPressed = false
  end
end
return true
end