Buenas a todos,
estoy creando un juego dondee tengo un menú inferior para crear distintos objetos.
El funcionamiento es el siguiente:
Bien, hay alguna forma de cuando se ha creado el objeto dispatchar el evento “touch” para que empiece a “dragearse”?
Muchas gracias.
Hola @sephirot36,
Does this help? It’s a basic touch-drag function:
[lua]
local function dragObject( event )
local target = event.target
local phase = event.phase
if ( event.phase == “began” ) then
local parent = target.parent
display.getCurrentStage():setFocus( target )
target.isFocus = true
target.x0 = event.x - target.x
target.y0 = event.y - target.y
target.xStart = target.x
target.yStart = target.y
target:toFront()
elseif ( target.isFocus ) then
if ( phase == “moved” ) then
target.x = event.x - target.x0
target.y = event.y - target.y0
elseif ( phase == “ended” or phase == “cancelled” ) then
display.getCurrentStage():setFocus( nil )
target.isFocus = false
end
end
return true
end
[/lua]
Brent
Hola @Brent,
quizas no me he explicado bien.
Yo tengo un boton que crea un objeto, este objeto puede “dragearse” pero para ello hace falta que le haga touch, lo que necesito es que al crearse (cuando hago press en el boton) sin levantar el dedo ya esté el objeto “drag” y el objeto siga mi posicion del touch, sin tener que volver a hacer touch sobre el objeto.
P.D: Esa funcionalidad dragObject ya la tengo implementada y funciona correctamente, basicamente lo que quiero es :
obj= display.newImage(“levels/”…name…".png")
obj:setReferencePoint( display.CenterReferencePoint )
menuGroup:insert( obj )
obj:addEventListener(“touch”,onTouch)
obj:dispatchEvent({name=“touch”,phase=‘began’, target=obj })
Muchas gracias
Solucionado!
Al crear el objeto añado al Stage un listener de touch que dispatcha el evento touch del objeto.
Al sacar el dedo tras crear el objeto ya se elimina el vento del Stage y se peude interactuar con el touch del objeto normalmente.
[lua]
obj= display.newImage(“levels/”…name…".png")
obj:setReferencePoint( display.CenterReferencePoint )
obj.x = positionX
obj.y = positionY
menuGroup:insert( obj )
f(x) touch to drag obj{}
obj:addEventListener(“touch”,onTouch)
objetoCreadoActual=obj --global variable
local stage=display.getCurrentStage()
local function onTouch(event)
local t=obj
local phase =event.phase
if(objetoCreadoActual~=nil)then
if “began” == phase then
objetoCreadoActual:dispatchEvent({name=“touch”,phase=‘began’,
target=objetoCreadoActual ,x=objetoCreadoActual.x ,
y=objetoCreadoActual.y })
elseif “moved” == phase then
objetoCreadoActual:dispatchEvent({name=“touch”,phase=‘moved’,
target=objetoCreadoActual ,x=objetoCreadoActual.x ,
y=objetoCreadoActual.y })
elseif “ended” == phase or “cancelled” == phase then
objetoCreadoActual:dispatchEvent({name=“touch”,phase=‘ended’,
target=objetoCreadoActual ,x=objetoCreadoActual.x ,
y=objetoCreadoActual.y })
objetoCreadoActual=nil
stage:removeEventListener(“touch”, onTouch)
end
end
return true
end
stage:addEventListener(“touch”, onTouch)[/lua]
Hola @sephirot36,
Does this help? It’s a basic touch-drag function:
[lua]
local function dragObject( event )
local target = event.target
local phase = event.phase
if ( event.phase == “began” ) then
local parent = target.parent
display.getCurrentStage():setFocus( target )
target.isFocus = true
target.x0 = event.x - target.x
target.y0 = event.y - target.y
target.xStart = target.x
target.yStart = target.y
target:toFront()
elseif ( target.isFocus ) then
if ( phase == “moved” ) then
target.x = event.x - target.x0
target.y = event.y - target.y0
elseif ( phase == “ended” or phase == “cancelled” ) then
display.getCurrentStage():setFocus( nil )
target.isFocus = false
end
end
return true
end
[/lua]
Brent
Hola @Brent,
quizas no me he explicado bien.
Yo tengo un boton que crea un objeto, este objeto puede “dragearse” pero para ello hace falta que le haga touch, lo que necesito es que al crearse (cuando hago press en el boton) sin levantar el dedo ya esté el objeto “drag” y el objeto siga mi posicion del touch, sin tener que volver a hacer touch sobre el objeto.
P.D: Esa funcionalidad dragObject ya la tengo implementada y funciona correctamente, basicamente lo que quiero es :
obj= display.newImage(“levels/”…name…".png")
obj:setReferencePoint( display.CenterReferencePoint )
menuGroup:insert( obj )
obj:addEventListener(“touch”,onTouch)
obj:dispatchEvent({name=“touch”,phase=‘began’, target=obj })
Muchas gracias
Solucionado!
Al crear el objeto añado al Stage un listener de touch que dispatcha el evento touch del objeto.
Al sacar el dedo tras crear el objeto ya se elimina el vento del Stage y se peude interactuar con el touch del objeto normalmente.
[lua]
obj= display.newImage(“levels/”…name…".png")
obj:setReferencePoint( display.CenterReferencePoint )
obj.x = positionX
obj.y = positionY
menuGroup:insert( obj )
f(x) touch to drag obj{}
obj:addEventListener(“touch”,onTouch)
objetoCreadoActual=obj --global variable
local stage=display.getCurrentStage()
local function onTouch(event)
local t=obj
local phase =event.phase
if(objetoCreadoActual~=nil)then
if “began” == phase then
objetoCreadoActual:dispatchEvent({name=“touch”,phase=‘began’,
target=objetoCreadoActual ,x=objetoCreadoActual.x ,
y=objetoCreadoActual.y })
elseif “moved” == phase then
objetoCreadoActual:dispatchEvent({name=“touch”,phase=‘moved’,
target=objetoCreadoActual ,x=objetoCreadoActual.x ,
y=objetoCreadoActual.y })
elseif “ended” == phase or “cancelled” == phase then
objetoCreadoActual:dispatchEvent({name=“touch”,phase=‘ended’,
target=objetoCreadoActual ,x=objetoCreadoActual.x ,
y=objetoCreadoActual.y })
objetoCreadoActual=nil
stage:removeEventListener(“touch”, onTouch)
end
end
return true
end
stage:addEventListener(“touch”, onTouch)[/lua]