Calling a Local Function

Hi Folks,

I am trying to find out why I have to setup my function “tvButton” as a global function?

I want to setup as a local function but get a error message “’(’ expected near ':'stack traceback:”

[code]
local tvButton = display.newRect( 440, 230, 190, 150 )
tvButton.alpha = 0.01

local tvsprt = require(“TVsprite”)
local spriteData = tvsprt.getSpriteSheetData()
local spriteSheet = sprite.newSpriteSheetFromData( “TVsprite.png”, spriteData )
local spriteSet = sprite.newSpriteSet(spriteSheet, 1, 64)
sprite.add(spriteSet,“TVsprite”,1,64,3000,1)

local function spriteEvent(pEvent)
if pEvent.phase == “ended” then
print(“sprite ended”)
pEvent.sprite:removeEventListener(“sprite”, spriteEvent)
pEvent.sprite:removeSelf()
end
end
function tvButton:touch (event)
if event.phase == “ended” then

print(“tv pressed”)
local si = sprite.newSprite( spriteSet )
si.x = 533
si.y = 300
si.xScale = 2.5
si.yScale = 2.5
si:prepare(“TVsprite”)
si:play()
si:addEventListener(“sprite”,spriteEvent)
timer.performWithDelay( 4000, bubbletvOn )

end
end

tvButton:addEventListener(“touch”, tvButton);

[/code] [import]uid: 131058 topic_id: 24343 reply_id: 324343[/import]

If you are talking about the function “tvButton:touch”, it’s because “tvButton” is already defined as a local and you are just adding a new method to the object. Trying to add a “local” in front of the function removes access to the object assigned to “tvButton” from that point on. [import]uid: 7559 topic_id: 24343 reply_id: 98351[/import]

Or you can do it like this:

[lua]local function tvButtonTouch(event)
–Do stuff
end

tvButton:addEventListener(“touch”, tvButtonTouch);[/lua]
[import]uid: 22076 topic_id: 24343 reply_id: 98354[/import]

I have modified to the below code and am still getting the following error Runtime error
assertion failed!
stack traceback:
[C]: ?
[C]: in function ‘assert’
?: in function ‘getOrCreateTable’
?: in function ‘addEventListener’

[code]
local tvButton = display.newRect( 440, 230, 190, 150 )
tvButton.alpha = 0.01

tvButton:addEventListener(“touch”, tvButtonTouch);

local tvsprt = require(“TVsprite”)
local spriteData = tvsprt.getSpriteSheetData()
local spriteSheet = sprite.newSpriteSheetFromData( “TVsprite.png”, spriteData )
local spriteSet = sprite.newSpriteSet(spriteSheet, 1, 64)
sprite.add(spriteSet,“TVsprite”,1,64,3000,1)

local function spriteEvent(pEvent)
if pEvent.phase == “ended” then
print(“sprite ended”)
pEvent.sprite:removeEventListener(“sprite”, spriteEvent)
pEvent.sprite:removeSelf()
end
end
local function tvButtonTouch (event)
if (event.phase == “ended”) then

print(“tv pressed”)
si = sprite.newSprite( spriteSet )
si.x = 533
si.y = 300
si.xScale = 2.5
si.yScale = 2.5
si:prepare(“TVsprite”)
si:play()
si:addEventListener(“sprite”,spriteEvent)
timer.performWithDelay( 4000, bubbletvOn )

end
end
[/code] [import]uid: 131058 topic_id: 24343 reply_id: 98504[/import]

tvButton:addEventListener("touch", tvButtonTouch);  

needs to be after

local function tvButtonTouch (event)  
 if (event.phase == "ended") then   
  
 print("tv pressed")  
 si = sprite.newSprite( spriteSet )  
 si.x = 533  
 si.y = 300  
 si.xScale = 2.5  
 si.yScale = 2.5  
 si:prepare("TVsprite")  
 si:play()  
 si:addEventListener("sprite",spriteEvent)  
 timer.performWithDelay( 4000, bubbletvOn )  
  
  
 end  
end  

Since tvButtonTouch had not been defined before you tried to access it in your add event listener. [import]uid: 19626 topic_id: 24343 reply_id: 98505[/import]

ah Duh me.

Thanks [import]uid: 131058 topic_id: 24343 reply_id: 98509[/import]