Hola,
El script de más abajo tiene dos funciones, rotar y mover objetos, la rotación me va bien pero el evento para mover el objeto plataforma , no me funciona bien. Cuando arrastro el dedo o en este caso (en el simulador) arrastro el puntero del ratón antes de tocar dicho objeto, me da el error que figura en la imagen que adjunto.
Lo que pretendo es que el objeto solo se mueva cuando lo arrastre con el dedo justo encima y no próximo a el.
Espero haberme explicado bien, os dejo el script funcionando con los objetos por si alguien quiere probarlo.
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)
Saludosss