我有一个“种子”对象,它有一个实例方法seed:fall()
,由我的update
函数调用(每帧都运行)。我有一个“触摸”事件监听器,所以用户可以拖动它。然而,当它被拖动时,它仍然在试图跌落,这使得拖动交互变得很糟糕。
我在我的种子“class”中添加了一个名为seed.falling
的实例变量。现在,在将种子移到屏幕上之前,fall()函数会检查seed.falling
是否为真。下一步是在拖动开始时将seed.falling设置为false,然后在拖动停止时将其设置为true。我不知道这最后一部分。
任何想法?是否有一个“停止拖动”事件,我可以设置一个监听器,重新启动seed.falling
?有没有更好的方法来实现我想要的东西?
答案 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
我认为这不是一个非常好的解决方案,因为它有时将种子搁浅在屏幕上 - 可能是当你将种子拖到另一颗落下的种子上时。