无法移动对象

时间:2014-12-28 10:44:31

标签: lua corona

下面的脚本有两个功能,旋转和移动对象,旋转进展顺利,但移动平台对象的事件,我不能正常工作。当我拖动你的手指或在这种情况下(在模拟器中)拖动鼠标指针,然后触摸对象,我得到附加图像中的错误。 我想要的是只有当你拖动到上方而不是靠近手指时才对象。 我希望我解释得很好,我留下了运行的对象以防万一有人想尝试脚本。

adjustlevel = true 
local function rotatePlatform(event)
     alerttouched = event.target

      if adjustlevel == true then 

        if (event.phase == "began") then
                display.getCurrentStage():setFocus( alerttouched )



           elseif (event.phase == "moved") then

                    platformTouched.x2 = event.x
                        platformTouched.y2 = event.y

                angle1 = 180/math.pi * math.atan2(platformTouched.y1 - platformTouched.y , platformTouched.x1 - platformTouched.x)
                        angle2= 180/math.pi * math.atan2(platformTouched.y2 - platformTouched.y , platformTouched.x2 - platformTouched.x)

                        differencebetweenangles = angle1 - angle2

                 --rotate it
                         platformTouched.rotation = platformTouched.rotation - differencebetweenangles


                         platformTouched.x1 = platformTouched.x2
                         platformTouched.y1 = platformTouched.y2


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

            display.getCurrentStage():setFocus( nil )

            display.remove( rotationalert )
            rotationalert = nil 


           end 
      end 
end  


local function movePlatform(event)
     platformTouched = event.target

     if adjustlevel == true then 

        if (event.phase == "began") then
                display.getCurrentStage():setFocus( platformTouched )       

        display.remove( rotationalert )
        rotationalert = nil 
        -- here the first position is stored in x and y              
        platformTouched.startMoveX = platformTouched.x
        platformTouched.startMoveY = platformTouched.y

        platformTouched.x1 = event.x
        platformTouched.y1 = event.y

            elseif (event.phase == "moved") then

                -- here the distance is calculated between the start of the movement and its current position of the drag    
        platformTouched.x = (event.x - event.xStart) + platformTouched.startMoveX
        platformTouched.y = (event.y - event.yStart) + platformTouched.startMoveY

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

                rotationalert = display.newImage ("rotation.png")
                rotationalert.x = platformTouched.x
                rotationalert.y = platformTouched.y 
                rotationalert.alpha = 0.5 
                rotationalert:addEventListener ("touch", rotatePlatform)
                --screenGroup:insert(rotationalert)

                display.getCurrentStage():setFocus( nil )

                end
                 return true
        end
 end 

plataforma = display.newImage("plataforma.png")
plataforma.x = display.contentWidth*0.5
plataforma.y = display.contentHeight*0.5
plataforma:addEventListener( "touch", movePlatform)
抱歉,现在我无法发布图片,我会把链接:

http://www.wekin.es/pruebas/error.jpg
http://www.wekin.es/pruebas/plataforma.png
http://www.wekin.es/pruebas/rotation.png

问候

3 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解这个问题(而且我知道我对Corona SDK一无所知)但听起来问题是你没有得到一个&#34 ;开始"当拖动/触摸在platforma对象之外开始并且仅移动"移动"时,对象上的相位事件手指穿过物体时的相位事件。

As-such platformTouched.startMoveX在发生这种情况时没有任何价值,因此你会在屏幕截图中看到错误。

鉴于你不希望手指拖动在这种情况下对对象做任何事情,无论如何你似乎应该检查"移动&#34中存在的platformTouched.startMoveX ;并且"结束"如果事件不存在,则阻止并忽略该事件。

答案 1 :(得分:0)

感谢您回答Etan。

我试图替换:

platformTouched.x = (event.x - event.xStart) + platformTouched.startMoveX
platformTouched.y = (event.y - event.yStart) + platformTouched.startMoveY

由:

platformTouched.x, platformTouched.y = event.x, event.y 

现在我可以更好地控制对象的移动,但是当我点击对象时,这是我专注于你的鼠标。谁知道如何避免这种情况?我打算如果我单击一端的对象,移动鼠标,鼠标跟在对象的末尾,我不会专注于它。

我希望我能解释清楚。

问候。

答案 2 :(得分:0)

修正,解释如果有人需要它我是如何解决的。 我离开了它,因为我在第一阶段之后添加了事件监听器isfocus启用它:

platformTouched.isFocus = true

并且在存储它的第一个位置之后,我已经完成了事件监听器isfocus:

       platformTouched.markX = platformTouched.x
       platformTouched.markY = platformTouched.y


elseif platformTouched.isFocus then

最后我在舞台结束后添加了一个假:

       display.getCurrentStage():setFocus( nil )
       platformTouched.isFocus = false

同样的旋转,我做得很好并且错误地将手指或手写笔拖过屏幕。 问候和感谢interesaros主题。