Function with physic don't work

Hello everybody,

I’m busy with a game, but i have a problem. I want every time a new “angry” will be added in the game. It works(function “makeAngry”), but when i call the physic in another functions, the function “moveAngry”, “functions” & “onCollision”. 

display.setStatusBar(display.HiddenStatusBar) local physics = require( "physics" ) physics.start() physics.setGravity(0, 0) local centerX = display.contentCenterX local centerY = display.contentCenterY local actualW = display.actualContentWidth local actualH = display.actualContentHeight local secondsLeft = 01 \* 60 -- 20 minutes \* 60 seconds local background = display.newRect( centerX, centerY, actualW, actualH ) background:setFillColor( 0, 0, 1 ) local score = 0 local scoreTxt = display.newText( "0", 0, 0, native.systemFontBold, 40 ) scoreTxt.x = centerX + actualW/2 - 20 scoreTxt.y = centerY - actualH/2 + 20 local function updateScore(event) score = score + 1 scoreTxt.text = string.format("%d", score ) end local clockText = display.newText("01:00", display.contentCenterX, 80, native.systemFontBold, 80) clockText:setFillColor( 0.7, 0.7, 1 ) local happy = display.newCircle( 0, 0, 10 ) happy.x = 45 happy.y = 45 physics.addBody( happy, "dynamic" ) happy:setFillColor( 0, 1, 0 ) happy.myName = "happy" local angry = display.newCircle( 0, 0, 10 ) angry.x = 420 angry.y = 280 physics.addBody( angry, "static" ) local function makeAngry() local angry = display.newCircle( 0, 0, 10 ) angry.x = math.random ( centerX - actualW/2, centerX + actualW/2 ) angry.y = math.random( centerY - actualH/2, centerY + actualH/2 ) angry:setFillColor( 1, 0, 0 ) angry.myName = "angry" physics.addBody( angry, "static" ) end timer.performWithDelay( 5000, makeAngry, 50 ) makeAngry() angry:setFillColor( 1, 0, 0 ) angry.myName = "angry" physics.addBody( angry, "static" ) local function updateTime() -- decrement the number of seconds secondsLeft = secondsLeft - 1 -- time is tracked in seconds. We need to convert it to minutes and seconds local minutes = math.floor( secondsLeft / 60 ) local seconds = secondsLeft % 60 -- make it a string using string format. local timeDisplay = string.format( "%02d:%02d", minutes, seconds ) clockText.text = timeDisplay end local countDownTimer = timer.performWithDelay( 1000, updateTime, secondsLeft ) function touchScreen(event) if event.phase == "began" then transition.to(happy, {time=1000, x=event.x, y=event.y}) end end Runtime:addEventListener( "touch", touchScreen ) function moveAngry() transition.to(angry, {time=1000, x=math.random( centerX - actualW/2, centerX + actualW/2 ), y=math.random( centerY - actualH/2, centerY + actualH/2 ), onComplete=moveAngry }) end moveAngry() local function functions() display.remove(angry) updateScore() end function onCollision(event) if event.phase == "began" then if event.target.myName == "angry" and event.other.myName == "happy" then functions() end end end angry:addEventListener( "collision", onCollision ) local function endGame() if secondsLeft == 0 then print("bye") Runtime:removeEventListener( "enterFrame", endGame ) end end Runtime:addEventListener( "enterFrame", endGame )

Hi @m.el.baghdadi8,

Basically, this is a scope issue. You have created one “angry” object (by that exact name) before you create a new “angry” object (of the same name) inside the function “makeAngry()”. So, Lua only knows that you’re referring to the first one, because it’s in the main scope, not the interior function scope.

Have you programmed in Lua before? If not, or if you need to study the concept of scope further, I recommend these resources:

https://coronalabs.com/blog/2015/06/16/tutorial-scope-for-beginners/

http://www.youtube.com/watch?v=2ATlcGP2zMY

Best regards,

Brent

Hi @m.el.baghdadi8,

Basically, this is a scope issue. You have created one “angry” object (by that exact name) before you create a new “angry” object (of the same name) inside the function “makeAngry()”. So, Lua only knows that you’re referring to the first one, because it’s in the main scope, not the interior function scope.

Have you programmed in Lua before? If not, or if you need to study the concept of scope further, I recommend these resources:

https://coronalabs.com/blog/2015/06/16/tutorial-scope-for-beginners/

http://www.youtube.com/watch?v=2ATlcGP2zMY

Best regards,

Brent