持续移动的角色跳过了帧。

我正在使用这段代码将猴子移动到我触摸屏幕的位置。如果我一次只触摸屏幕一次,它运行得很好,但当我尝试不断地在左右两侧触摸屏幕时,它会跳过帧并转移到我之前触摸屏幕的区域。

  local function moveMonkey(event)
      if event.phase == "began" then
          speed = 1500 / screenWidth * (mAbs(monkey.x - event.x))
          transition.to ( monkey, {time = speed, x = event.x} )
      end
  end
点赞
用户869951
用户869951

在开始一个新的转换之前(在相同的参数下),您应该取消之前的转换。通过保存transition.to的返回值并在创建新的转换之前检查变量是否已定义,如果是,则调用transition.cancel()

local trans = nil

local function moveMonkey(event)
      if event.phase == "began" then
          speed = 1500 / screenWidth * (mAbs(monkey.x - event.x))
          if trans ~= nil then
               transition.cancel(trans)
          end
          trans = transition.to ( monkey, {time = speed, x = event.x} )
      end
end

有其他管理转换的方法,请见 这里。例如,您可能能够标记转换并取消它,因此不需要保留对它的引用(但我现在无法测试,不知道在不存在的标记上 transition.cancel 是否会导致问题--我猜它将被忽略),但标记名称应该很独特:

local function moveMonkey(event)
      if event.phase == "began" then
          speed = 1500 / screenWidth * (mAbs(monkey.x - event.x))
          transition.cancel("monkey_trans")
          transition.to ( monkey, {time = speed, x = event.x, tag="monkey_trans"} )
      end
end
2014-11-22 21:29:20