Slider Touch event

Hello everyone, i am a new user of corona sdk, and i am making a slider menu, but i am not able to make this part:

  • When i touch on the slider image, it will change to other scene.

Can you give me some help?or tell me what is wrong on my code?

Code:

  
module(..., package.seeall)  
-- vars local  
local main\_sprt = nil  
local bck\_shp = nil  
local slider = nil  
local slider\_sprt = nil  
----------------------------------------------------------------------------------------------------  
-- init  
----------------------------------------------------------------------------------------------------  
local function init()  
  
 -- statusBar  
 display.setStatusBar( display.HiddenStatusBar )  
  
 -- main\_sprt  
 main\_sprt = display.newGroup()  
 --Screen   
  
 \_W = display.contentWidth;  
 \_H = display.contentHeight;  
  
 -- bck  
 bck\_shp = display.newRect( 0, 0,\_W,\_H)  
 main\_sprt:insert( bck\_shp )  
 bck\_shp:setFillColor( 192, 192, 192 )  
  
 -- slider  
 slider = require( "slider" )  
 slider:init()  
 slider\_sprt = slider:getSprite()  
 main\_sprt:insert( slider\_sprt )  
 slider\_sprt.x = 0.5 \* ( \_W - 256 - 16 )  
 slider\_sprt.y = 65  
  
 local slide\_sprt = nil  
  
 -- slide 1  
 slide\_sprt = renderSlide( )  
 slider.addSlide( slide\_sprt)  
  
 -- slide 2  
 slide\_sprt = renderSlide2( )  
 slider.addSlide( slide\_sprt )  
  
  
  
  
  
end  
  
----------------------------------------------------------------------------------------------------  
-- Background, Slider, Text  
----------------------------------------------------------------------------------------------------  
function renderSlide()  
  
 -- slide\_sprt  
 local slide\_sprt = display.newGroup()  
  
  
  
  
-- go to levels  
 local bck\_sprt = display.newImageRect( "assets/slide\_bck.png", 200, 200 )  
 bck\_sprt.x = \_W/2 -25; bck\_sprt.y = \_H/2 -100  
 bck\_sprt.scene = "ola"  
  
 function changeScene(e)  
 if (e.phase == "ended") then  
 director:changeScene(e.target.scene)  
 end  
 end  
  
 slide\_sprt:insert( bck\_sprt )  
  
 bck\_sprt:addEventListener("touch",changeScene)  
  
 return slide\_sprt  
  
end  
  
  
----------------------------------------------------------------------------------------------------  
-- Background, Slider, Text  
----------------------------------------------------------------------------------------------------  
function renderSlide2()  
  
 -- slide\_sprt  
 local slide\_sprt = display.newGroup()  
  
  
  
  
-- go to levels  
 local bck\_sprt = display.newImageRect( "assets/game\_bck.png", 200, 200 )  
 bck\_sprt.x = \_W/2 -25; bck\_sprt.y = \_H/2 -100  
 bck\_sprt.scene = "game"  
  
 function changeScene(e)  
 if (e.phase == "ended") then  
 director:changeScene(e.target.scene)  
 end  
 end  
  
 slide\_sprt:insert( bck\_sprt )  
  
 bck\_sprt:addEventListener("touch",changeScene)  
  
 return slide\_sprt  
  
end  
  
init()  

what is wrong on the code?because when i touch on the slider, he dont change the scene
The importante part is on the functions, “–go to levels” [import]uid: 26056 topic_id: 14844 reply_id: 314844[/import]

Code Updated [import]uid: 26056 topic_id: 14844 reply_id: 55033[/import]

Can you kindly provide either some plug and play code up upload a copy of your project somewhere? (Will make it easier to look over.)

Peach :slight_smile: [import]uid: 52491 topic_id: 14844 reply_id: 55043[/import]

it is the slider.lua, and the code posted above is the select_slider.lua, that include slider.lua

[code]
module( …, package.seeall )
– vars
local slider_sprt = nil
local slides_sprt = nil
local btns_sprt = nil

local isDragging = false
local currSlideIndex = 1
local startPosX = 0
local offsetPosX = 0
local lastPosX = 0
local lastTimeMsec = 0
local dX = 0
local slide_twn = nil

– forward declerations
local touchCb
local slideEndCb
local toggleBtns
local startDrag
local endDrag
local drag
local slideTo

–##################################################################################################
– PUBLIC METHODS
–##################################################################################################


–Screen

_W = display.contentWidth;
_H = display.contentHeight;


– init

function init()

– vars
slider_sprt = nil
slides_sprt = nil
btns_sprt = nil

isDragging = false
currSlideIndex = 1
startPosX = 0
offsetPosX = 0
lastPosX = 0
lastTimeMsec = 0
dX = 0
slide_twn = nil

– slider_sprt
slider_sprt = display.newGroup()

– slides_sprt
slides_sprt = display.newGroup()
slider_sprt:insert( slides_sprt )

– btns_sprt
btns_sprt = display.newGroup()
slider_sprt:insert( btns_sprt )

– events
slides_sprt:addEventListener( “touch”, touchCb )
–Runtime:addEventListener( “touch”, touchCb )

end


– dispose

function dispose()

– events
slides_sprt:removeEventListener( “touch”, touchCb )
–Runtime:removeEventListener( “touch”, touchCb )

– cancel tween
if ( slide_twn ~= nil ) then
transition.cancel( slide_twn )
slide_twn = nil
end

– btns_sprt
local thisBtn = nil
while ( btns_sprt.numChildren > 0 ) do
thisBtn = btns_sprt[1]
for j=1, thisBtn.numChildren do
thisBtn:remove( 1 )
end
thisBtn:removeEventListener( “tap”, tapCb)
btns_sprt:remove( thisBtn )
end
slider_sprt:remove( btns_sprt )
btns_sprt = nil

– slides_sprt
slides_sprt = display.newGroup()

local thisSlide_sprt = nil
while ( slides_sprt.numChildren > 0 ) do
–thisSlide_sprt.dispose()
thisSlide_sprt = slides_sprt[1]
slides_sprt:remove( thisSlide_sprt )
end
slider_sprt:remove( slides_sprt )
slides_sprt = nil

– slider_sprt

– vars

end


– getSprite

function getSprite()

return slider_sprt

end


– getSlide

function getSlide( slideIndex )

return slides_sprt[slideIndex]

end


– setState

function addSlide( slide_sprt, btn_sprt )

– slide
slides_sprt:insert( slide_sprt )
slide_sprt.x = (slides_sprt.numChildren - 1 ) * _W

– btn
if ( btn_sprt ~= nil ) then
btns_sprt:insert( btn_sprt )
btn_sprt:addEventListener( “tap”, tapCb)
toggleBtns( 1 )
end

end

–##################################################################################################
– PRIVATE METHODS
–##################################################################################################


– touchCb

function touchCb( evt )

if (evt.phase == “began”) then
startDrag( evt )
elseif (evt.phase == “ended”) then
endDrag( evt )
else
drag( evt )
end

end


– slideEndCb

function slideEndCb( evt )

– currSlideIndex
currSlideIndex = 1 + math.floor( (-slides_sprt.x + 0.5 * display.contentWidth) / display.contentWidth )
– offsetPosX
offsetPosX = slides_sprt.x
– btns
toggleBtns( currSlideIndex )

end


– tapCb

function tapCb( evt )

local btnId = evt.target.id
–toggleBtns( btnId )
slideTo( btnId, 2500 )

end


– toggleBtns

function toggleBtns( activeBtnId )

local this_btn = nil
local isActive = false
for i=1, btns_sprt.numChildren do
this_btn = btns_sprt[i]
if ( this_btn ~= nil ) then
isActive = ( i == activeBtnId )
this_btn[1].isVisible = isActive
this_btn[2].isVisible = not isActive
end
end

end


– startDrag

function startDrag( evt )

isDragging = true

– startPosX
–startPosX = evt.xStart
startPosX = evt.x

– offsetPosX
offsetPosX = slides_sprt.x

– lastPosX and lastTimeMsec
lastPosX = evt.x
lastTimeMsec = system.getTimer()

– cancel tween
if ( slide_twn ~= nil ) then
transition.cancel( slide_twn )
slide_twn = nil
end

end


– endDrag

function endDrag( evt )

isDragging = false

– calc speed
local dT = system.getTimer() - lastTimeMsec
if (dT < 10) then dT = 10 end
local speed = dX / ( 0.001 * dT )

– targetSlideIndex
local targetSlideIndex = currSlideIndex

if (math.abs(speed) > 500) then
– speed
targetSlideIndex = targetSlideIndex - (speed / math.abs(speed))
else
targetSlideIndex = 1 + math.floor( (-slides_sprt.x + 0.5 * _W) / _W )
speed = 1000
end

– min / max slide index
if ( targetSlideIndex <= 0 or targetSlideIndex > slides_sprt.numChildren) then
targetSlideIndex = currSlideIndex
speed = 1000
end

– slide tween
slideTo( targetSlideIndex, speed )

end


– drag

function drag( evt )

if ( false == isDragging ) then
startDrag( evt )
startPosX = evt.x
end

– lastPosX and lastTimeMsec
dX = evt.x - lastPosX
lastPosX = evt.x
lastTimeMsec = system.getTimer()

– pos
–slides_sprt.x = offsetPosX + evt.x - evt.xStart
slides_sprt.x = offsetPosX + evt.x - startPosX

end


– slideTo

function slideTo( targetSlideIndex, speed )

– cancel tween
if ( slide_twn ~= nil ) then
transition.cancel( slide_twn )
slide_twn = nil
end

– tween
local targetPosX = (targetSlideIndex - 1) * display.contentWidth
local timeMsec = 1000 * math.abs( (slides_sprt.x + targetPosX) / speed )

slide_twn = transition.to( slides_sprt, { x = -targetPosX, time = timeMsec, onComplete = slideEndCb } )

end [import]uid: 26056 topic_id: 14844 reply_id: 55055[/import]

Try this (modified the only part that seems relevant to the issue) :

[code]

– Background, Slider, Text

–Moved here
function changeScene(e)
if (e.phase == “ended”) then
director:changeScene(e.target.scene)
end
end

–Moved here, why were you creating a new group for each slide?
– slide_sprt
local slide_sprt = display.newGroup()

function renderSlide2()

– go to levels
local bck_sprt = display.newImageRect( “assets/game_bck.png”, 200, 200 )
bck_sprt.x = _W/2 -25; bck_sprt.y = _H/2 -100
bck_sprt.scene = “game”

slide_sprt:insert( bck_sprt )

bck_sprt:addEventListener(“touch”,changeScene)

return bck_sprt --Changed

end

init()
[/code] [import]uid: 84637 topic_id: 14844 reply_id: 55379[/import]

hmm not working, I’m also trying to.
i tried some differents forms, joint now in your answers, but the touch dont work, and if i use your code in last post the slide change position on the X coordinates. [import]uid: 26056 topic_id: 14844 reply_id: 55380[/import]