【问题标题】:Corona SDK - change a variable for the duration of a drag eventCorona SDK - 在拖动事件期间更改变量
【发布时间】:2012-04-01 09:58:48
【问题描述】:

我有一个“种子”对象,它有一个实例方法seed:fall(),由我的update 函数(每帧运行)调用。我有一个“触摸”事件监听器,因此用户可以拖动它。然而,当它被拖动时,它仍然试图下降,这使得拖动交互出现故障。

我已将一个实例变量添加到我的种子“类”中,名为seed.falling。 fall() 函数现在在将种子向下移动到屏幕之前检查 seed.falling 是否为真。下一步是在拖动开始时将 seed.falling 设置为 false,然后在拖动停止时将其设置回 true。但我无法弄清楚最后一部分。

有什么想法吗?是否有一个“停止拖动”事件我可以设置一个监听器,重新打开seed.falling?有没有更好的方法来实现我想要的?

【问题讨论】:

  • 您是否使用“触摸”事件阶段:“开始”、“移动”和“结束”?

标签: coronasdk


【解决方案1】:
physics.start()
physics.setGravity(0,1)
local dd = display.newRect(400,100,200,200)
physics.addBody(dd,"dynamic")
dd:addEventListener("touch", function(event)
    if event.phase == "began" then
        dd.bodyType = "static"
    elseif event.phase == "moved" then
        dd.x,dd.y = event.x,event.y
    elseif event.phase == "ended" then
        dd.bodyType = "dynamic"
    end
end)

我觉得这个案子是你想要的?

【讨论】:

  • 我在对象上没有物理,但我确实使用 event.phase 属性来处理这种情况 - 请参阅我的答案。
【解决方案2】:

只是为了记录,这就是我解决这个问题的方法。

基本上我有一个属性“seed.falling”,种子:下降方法在移动种子之前检查它。如果我们处于拖动事件的“结束”阶段,我将该属性设置为 false,这会阻止种子掉落。

function Seed:new(x,y)
  print("Seed:new, x = " .. (x or nil) .. ", y = " .. (y or nil) )
  local seed = display.newImage("seed_icon.png")
  seed.x =    x
  seed.y =    y
  seed.name = 'seed'   
  seed.falling = true

  function seed:fall()
    if(self.falling) then
      self.y = self.y + 1
    end
  end

  function seed:drag(event)
    seed.x = event.x
    seed.y = event.y
    if(event.phase == "ended") then
      seed.falling = true
    else 
      seed.falling = false
    end
  end    

  seed:addEventListener("touch", drag)

  return seed
end      

function drag(event)
  seed = event.target
  seed:drag(event)
end    

我认为这不是一个很好的解决方案,因为它有时会使种子滞留在屏幕上 - 可能是当您将种子拖到另一颗落下的种子上时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2013-04-01
    • 2012-02-26
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多