Corona SDK - 在拖动事件的持续时间内更改变量

时间:2012-04-01 09:58:49

标签: corona

我有一个“种子”对象,它有一个实例方法seed:fall(),由我的update函数调用(每帧都运行)。我有一个“触摸”事件监听器,所以用户可以拖动它。然而,当它被拖动时,它仍然在试图跌落,这使得拖动交互变得很糟糕。

我在我的种子“class”中添加了一个名为seed.falling的实例变量。现在,在将种子移到屏幕上之前,fall()函数会检查seed.falling是否为真。下一步是在拖动开始时将seed.falling设置为false,然后在拖动停止时将其设置为true。我不知道这最后一部分。

任何想法?是否有一个“停止拖动”事件,我可以设置一个监听器,重新启动seed.falling?有没有更好的方法来实现我想要的东西?

2 个答案:

答案 0 :(得分:2)

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)

我认为这个案例是你想要的吗?

答案 1 :(得分:1)

只是为了记录,这是我如何解决这个问题。

基本上我有一个属性“seed.falling”,种子:fall方法在移动种子之前检查。如果我们在拖动事件的“已结束”阶段,那么我将该属性设置为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    

我认为这不是一个非常好的解决方案,因为它有时将种子搁浅在屏幕上 - 可能是当你将种子拖到另一颗落下的种子上时。