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