电晕 - Lua - 没有物理的拖动物体

时间:2014-02-13 13:39:35

标签: drag-and-drop lua corona

我对lua编码比较新,所以请耐心等待。 我最终试图设置一个拖累和放大器在一个场景上放置多个“图块”的功能。但首先(并确保我正确理解所有这些)我只是想让一块瓷砖在屏幕上移动。

所以我浏览了一段时间的互联网并找到了下面的解决方案(以及其他类似的解决方案)并使用我自己的对象名称等实现了这一点。

效果很好....但是......当我将对象拖动到屏幕的右上象限(在模拟器和手机上)时,对象会卡住,这很不幸。它会在触及屏幕右上象限的任何部分时停止拖动,我无法重新选择它以将其拖回屏幕的其余部分。

关于为什么会发生这种情况的任何想法? (我的代码如下)

local _H = display.contentHeight
local _W = display.contentWidth

local notesGroup = display.newGroup()

local tile1 = display.newImage ("graphics/image.PNG")
tile1.x = _W/2
tile1.y =  _H/2 

function tile1:touch( event )
    if event.phase == "began" then

    self.markX = self.x    -- store x location of object
    self.markY = self.y    -- store y location of object

elseif event.phase == "moved" then

    local x = (event.x - event.xStart) + self.markX
    local y = (event.y - event.yStart) + self.markY

    self.x, self.y = x, y   
end

return true

notesGroup:insert(tile1)

tile1:addEventListener("touch", tile1)

3 个答案:

答案 0 :(得分:1)

您需要将焦点设置在触摸的对象上,以防止在将其丢弃到屏幕外时丢失它。您的触摸事件应如下所示:

function tile1:touch( event )
if event.phase == "began" then

    display.getCurrentStage():setFocus( event.target )
    self.markX = self.x    -- store x location of object
    self.markY = self.y    -- store y location of object

elseif event.phase == "moved" then

    local x = (event.x - event.xStart) + self.markX
    local y = (event.y - event.yStart) + self.markY

    self.x, self.y = x, y

elseif event.phase == "ended"  or event.phase == "cancelled" then

    display.getCurrentStage():setFocus(nil)

end

return true

end

答案 1 :(得分:0)

尝试

Set-Location

答案 2 :(得分:0)

处理触摸移动的方式的一个问题是,如果触摸移动到帧之间的DisplayObject(在这种情况下,tile1),则在渲染下一个之前不会调用对象的侦听器方法框架及其位置不会更新。这可能解释了你所获得的奇怪的“卡在右上象限”行为。

lduriatLukis表示在对象上设置此触摸事件的焦点(请注意lduriat使用event.id来处理多点触控案例)可以避免此问题。在处理setFocus()事件时使用touch解释了in this section of the Corona Events/Listeners dev guide