Jump to content

[TOPIC: topicViewTemplate]
[GLOBAL: userSmallPhoto]
Photo

game.lua:176:bad argument #-1 to 'newRect' (Proxy expected, got nil)
Started by luca.guidotto Feb 09 2020 06:13 AM

4 replies to this topic
groupscene newrect help
[TOPIC CONTROLS]
[/TOPIC CONTROLS]
[modOptionsDropdown]
[/modOptionsDropdown]
[reputationFilter]
[TOPIC: post.html]
#1

luca.guidotto

[GLOBAL: userInfoPane.html]
luca.guidotto
  • Observer

  • 2 posts
  • Corona SDK

Hi, i have a problem that i can't  resolve with the "game" scene of my project... can someone help me? The mistake is at the line 176, i think that is a problem with the group "objects" but i don't know why appears this mistake.

 

This is the function where the error appear

[lua]
function fCounterCO2()
--permette al contatore della cO2 di aumentare o diminuire 

if (dimYCounter1<100) then --se la dimensione y della barra della CO2 è minore di 100
dimYCounter1=dimYCounter1+0.01 --allora aumenta di un valore x  la dimensione y della barra
counterCO2 = display.newRect(objects,posXCO2,posYCO2,15,dimYCounter1) ---LINE 176

else if (dimYCounter1>99) then --se la dimensione y della barra della CO2 è maggiore di 99
  composer.gotoScene("gameOver") --allora vai alla schermata "gameOver"
end
end

 end
[lua]

this is the "game" sccene of my project 

[lua]
-----------------------------------------------------------------------------------------
--
-- Eco plague -- game scene
--
-----------------------------------------------------------------------------------------


-- Load the composer library 
local composer = require( "composer" )

-- define a new Scene 
local scene = composer.newScene()


-- -----------------------------------------------------------------------------------
-- Code outside of the scene event functions below will only be executed ONCE unless
-- the scene is removed entirely (not recycled) via "composer.removeScene()"
-- -----------------------------------------------------------------------------------


-- -----------------------------------------------------------------------------------
-- Scene event functions
-- -----------------------------------------------------------------------------------

   --------creo i gruppi di visualizzazione--------------
local farBackground=display.newGroup()
local nearBackground= display.newGroup()
objects = display.newGroup()

money= 100000    --variabile globale che inizializza i crediti a disposizione dell'utente ad inizio partita
dimYCounter1=70  --variabile globale per la dimensione y del contatore per la barra della CO2
dimYCounter2=10  --variabile globale per la dimensione y del contatore per la barra della green people

-- create()
function scene:create( event )


    local sceneGroup = self.view
    -- Here we create the graphics element of the game
--------------------caricamento sfondo ---------------------------------------------
local background = display.newImageRect(farBackground,"GameProgramming/LayerMondo/MARE.png",display.contentWidth,display.contentHeight)
----------------posiziono lo sfondo al centro-------------------------
background.x = display.contentCenterX
background.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo AFRICA ---------------------------------------------
local backgroundAfrica= display.newImageRect(nearBackground,"GameProgramming/LayerMondo/AFRICA.png",display.contentWidth,display.contentHeight)
backgroundAfrica.x = display.contentCenterX
backgroundAfrica.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo ANTARTIDE---------------------------------------------
local backgroundAntartide= display.newImageRect(nearBackground,"GameProgramming/LayerMondo/ANTARTIDE.png",display.contentWidth,display.contentHeight)
backgroundAntartide.x = display.contentCenterX
backgroundAntartide.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo ASIA---------------------------------------------
local backgroundAsia = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/ASIA.png",display.contentWidth,display.contentHeight)
backgroundAsia.x = display.contentCenterX
backgroundAsia.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo EUROPA---------------------------------------------
local backgroundEuropa = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/EUROPA.png",display.contentWidth,display.contentHeight)
backgroundEuropa.x = display.contentCenterX
backgroundEuropa.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo GROENLANDIA--------------------------------------------
local backgroundGroenlandia = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/GROENLANDIA.png",display.contentWidth,display.contentHeight)
backgroundGroenlandia.x = display.contentCenterX
backgroundGroenlandia.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo NORD AMERICA---------------------------------------------
local backgroundNordAmerica = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/NORDAMERICA.png",display.contentWidth,display.contentHeight)
backgroundNordAmerica.x = display.contentCenterX
backgroundNordAmerica.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo OCEANIA---------------------------------------------
local backgroundOceania = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/OCEANIA.png",display.contentWidth,display.contentHeight)
backgroundOceania.x = display.contentCenterX
backgroundOceania.y = display.contentCenterY
--------------------caricamento e posizionamento sfondo SUD AMERICA---------------------------------------------
local backgroundSudAmerica = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/SUDAMERICA.png",display.contentWidth,display.contentHeight)
backgroundSudAmerica.x = display.contentCenterX
backgroundSudAmerica.y = display.contentCenterY

-------------------------ContatoreCO2EMPTY-------------------------------------------
--inserimento
local counter1Empty= display.newImageRect(objects,"GameProgramming/Interface/Fiala_CO2_Empty.png",display.contentWidth,display.contentHeight)
--posizionamento
counter1Empty.x = (display.contentWidth * 94.7)/100
counter1Empty.y = (display.contentHeight * 56)/100
--dimensionamento
counter1Empty.width=150
counter1Empty.height=150

-------------------------inserimento ContatoreCO2 (barra)-------------------------------------------
posXCO2 = (display.contentWidth * 97)/100
posYCO2 = (display.contentHeight * 50)/100
counterCO2 = display.newRect(objects,posXCO2,posYCO2,15,dimYCounter1)  

-------------------------ContatoreGreenPeopleEmpty-------------------------------------------
--inserimento
local counter2Empty= display.newImageRect(objects,"GameProgramming/Interface/Fiala_Green_Empty.png",display.contentWidth,display.contentHeight)
--posizionamento
counter2Empty.x = (display.contentWidth * 92.7)/100
counter2Empty.y = (display.contentHeight * 44)/100
--dimensionamento
counter2Empty.width=150
counter2Empty.height=150

--[[------------------caricamento e posizionamento barra blu per scorrimento immagine---------------------------------------------
local barraBlu1 = display.newImageRect(nearBackground,"GameProgramming/LayerMondo/barraNera.png",display.contentWidth,display.contentHeight)
barraBlu1.x = (display.contentWidth*92.7)/100
barraBlu1.y = (display.contentHeight*50)/100
barraBlu1.width=25
barraBlu1.height=50]]--

---------------------inserimento contatore green people (barra)-----------------------------------
posXGP= (display.contentWidth * 94)/100
posYGP= (display.contentHeight * 50)/100
counterGreen = display.newRect(objects,posXGP,posYGP,15, dimYCounter2)
-------------------------Bottone Albero Potenziamenti------------------------------------
--posizionamento
posX = (display.contentWidth * 10)/100
posY = (display.contentHeight * 85)/100
--inserimento
bottoneAlbero = display.newCircle(objects,posX,posY,40)

-------------------------Bottone Albero Potenziamenti passivo 2------------------------------------
--posizionamento
posX = (display.contentWidth * 10)/100
posY = (display.contentHeight * 65)/100
--inserimento
bottoneAlberoPassivo = display.newCircle(objects,posX,posY,40)

-------------------------Bottone Settings------------------------------------------------
--posizionamento
posX = (display.contentWidth * 8)/100
posY = (display.contentHeight * 10)/100
--inserimento
bottoneSetting = display.newImageRect(objects,"GameProgramming/Interface/INT_settings_wheel.png",display.contentWidth,display.contentHeight)

-------------------------Contatore soldi------------------------------------------------
--[[moneyCounter =display.newText({text="Money "..tostring(money),font="Arial",fontSize="24"})
moneyCounter.x = (display.contentWidth * 85)/100
moneyCounter.y= (display.contentHeight * 10)/100]]--

sceneGroup:insert(farBackground)
sceneGroup:insert(nearBackground)
sceneGroup:insert(objects)

end

local function openTree()
-- permette di andare alla scena 'tree'
composer.gotoScene("tree")
return true
end
local function openpassiveTree()
-- permette di andare alla scena 'passiveTree'
composer.gotoScene("tree2")
return true
end

local function impostazioni()
-- permette di andare alla scena 'settings'
display.remove(moneyCounter)
composer.gotoScene("settingsGame")
return true
end

local function gameOver() 
-- permette di andare alla scena 'game Over'
display.remove(moneyCounter)
composer.gotoScene("gameOver")
return true
end

function fCounterCO2()
--permette al contatore della cO2 di aumentare o diminuire 

if (dimYCounter1<100) then --se la dimensione y della barra della CO2 è minore di 100
dimYCounter1=dimYCounter1+0.01 --allora aumenta di un valore x  la dimensione y della barra
counterCO2 = display.newRect(objects,posXCO2,posYCO2,15,dimYCounter1) ---LINE 176

else if (dimYCounter1>99) then --se la dimensione y della barra della CO2 è maggiore di 99
  composer.gotoScene("gameOver") --allora vai alla schermata "gameOver"
end
end

 end

 function fCounterGreenPeople()
--permette al contatore della green people di aumentare o diminuire 
if (dimYCounter2<100) then --se la dimensione y della barra della green people è minore di 100
dimYCounter2 = dimYCounter2+0.01 --allora aumenta di un valore x la dimensione y della barra
counterGreen = display.newRect(objects,posXGP,posYGP,15,dimYCounter2) --visualizzazione su schermo dell'aumento della grandezza della barra

else if (dimYCounter2>99) then --se la dimensione y della barra della CO2 è maggiore di 99
  composer.gotoScene("gameOver") --allora vai alla schermata "gameOver"
end
end
 end

 local function moneyGrow () --questa funzione permette al contatore dei crediti dell'utente di aumentare
 --[[local money=100000
 local moneyCounter =display.newText({text="Money "..tostring(money),font="Arial",fontSize="24"})
moneyCounter.x = (display.contentWidth * 85)/100
moneyCounter.y= (display.contentHeight * 10)/100]]--
display.remove(moneyCounter) --viene rimosso il primo oggetto moneyCounter visualizzato su schermo a inizio partita
if(money<600000) then -- se i crediti sono meno di 600mila..
money = tonumber(money)  --trasformo nuovamente la variabile money in un numero
money= money+1 -- la incremento di un valore x
display.remove(moneyCounter) -- rimuovo il contatore col "vecchio" valore
moneyCounter =display.newText({text="Money "..tostring(money),font="Arial",fontSize="24"}) --e visualizzo il nuovo valore incrementato
moneyCounter.x = (display.contentWidth * 85)/100 --posizione x del contatore dei crediti
moneyCounter.y= (display.contentHeight * 10)/100 --posizione y del contatore dei crediti
elseif (money>599000) then    --se i crediti sono maggiori di 599mila... 
composer.gotoScene("tree")    --vai alla scena "tree" in modo da costringere l'utente ad un acquisto
end
 end

-- show()
function scene:show( event )

    local sceneGroup = self.view
    local phase = event.phase

    if ( phase == "will" ) then
--------------posiziono il pulsante dell'albero dei potenziamenti------------------ 
posX = (display.contentWidth * 10)/100
posY = (display.contentHeight * 85)/100
-------------------posiziono il pulsante dell'albero dei potenziamenti passivo ------------------------
posX = (display.contentWidth * 10)/100
posY = (display.contentHeight * 65)/10
-------------------------posiziono il Bottone Settings------------------------------------------------
bottoneSetting.x = (display.contentWidth * 8)/100
bottoneSetting.y = (display.contentHeight * 10)/100
bottoneSetting.width=32
bottoneSetting.height=32
------------------------posiziono la barra del cO2-----------------------------------------
posX = (display.contentWidth * 97)/100
posY = (display.contentHeight * 50)/100
------------------posiziono la barra della green people----------------------------------------
posX = (display.contentWidth * 94)/100
posY = (display.contentHeight * 50)/100


    elseif ( phase == "did" ) then

------------aggiungo i vari listeners------------

    bottoneAlbero:addEventListener("tap",openTree)

bottoneAlberoPassivo:addEventListener( "tap",openpassiveTree )

bottoneSetting:addEventListener("tap", impostazioni)

Runtime:addEventListener( "enterFrame" , fCounterCO2)

Runtime:addEventListener( "enterFrame" , fCounterGreenPeople)

Runtime:addEventListener( "enterFrame" , moneyGrow)
end
end


-- hide()
function scene:hide( event )

    local sceneGroup = self.view
    local phase = event.phase

    if ( phase == "will" ) then

-------------rimuovo i listeners-----------------

bottoneAlbero:removeEventListener("tap",openTree)

bottoneAlberoPassivo:removeEventListener( "tap",openpassiveTree )

bottoneSetting:removeEventListener("tap", impostazioni)

Runtime:removeEventListener( "enterFrame" , fCounterCO2)

Runtime:removeEventListener( "enterFrame" , fCounterGreenPeople)

Runtime:removeEventListener( "enterFrame" , moneyGrow)

       
    elseif ( phase == "did" ) then
    end
end


-- destroy()
function scene:destroy( event )

    local sceneGroup = self.view
    -- Code here runs prior to the removal of scene's view


end
  

-- -----------------------------------------------------------------------------------
-- Scene event function listeners
-- -----------------------------------------------------------------------------------
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene )
scene:addEventListener( "destroy", scene )
-- -----------------------------------------------------------------------------------
 tempo = timer.performWithDelay(10000,gameOver,0)
return scene
[/lua]


[TOPIC: post.html]
#2

XeduR @Spyric

[GLOBAL: userInfoPane.html]
XeduR @Spyric
  • Corona Geek

  • 1,176 posts
  • Corona SDK

1) Welcome to the forums,

 

2) Please use the code formatting tool when posting code, i.e. the <> button.

 

3) Please include the line numbers if you refer to a specific line of code, because no one is going to count to line 176 to find what line you are talking about.

 

4) Please narrow down on your problem. You've posted your entire scene, but surely the problem doesn't require all that code to figure it out?

 

5) Consider reading: https://forums.coronalabs.com/topic/55780-ask-a-better-question-get-a-better-answer/


  • pixec likes this

[TOPIC: post.html]
#3

andrake12

[GLOBAL: userInfoPane.html]
andrake12
  • Observer

  • 12 posts
  • Corona SDK

The error is most likely related to assigning two newRect's to the same global counterCO2.

There seem to be a number of other issues with scope. I would suggest using local variables

where possible.



[TOPIC: post.html]
#4

ConveyedRex7592

[GLOBAL: userInfoPane.html]
ConveyedRex7592
  • Observer

  • 23 posts
  • Corona SDK

I had that error to, but I just removed first argument(parent(group))



[TOPIC: post.html]
#5

sporkfin

[GLOBAL: userInfoPane.html]
sporkfin
  • Contributor

  • 780 posts
  • Corona SDK

Look at this line

money= 100000 --variabile globale che inizializza i crediti a disposizione dell'utente ad inizio partita

Notice that everything after the " ' " in dell'utente is put in string format.  The area of effected code contains dozens of lines including your function.  Try fixing this error and see if it helps.

 

***nevermind, that's just the way your code was formatted above.  In my editor it's fine.




[topic_controls]
[/topic_controls]

Also tagged with one or more of these keywords: groupscene, newrect, help