Jump to content

[TOPIC: topicViewTemplate]
[GLOBAL: userSmallPhoto]
Photo

Scene (help)
Started by hellschicken2012 Mar 25 2014 07:00 AM

11 replies to this topic
[TOPIC CONTROLS]
This topic has been archived. This means that you cannot reply to this topic.
[/TOPIC CONTROLS]
[modOptionsDropdown]
[/modOptionsDropdown]
[reputationFilter]
[TOPIC: post.html]
#1

hellschicken2012

[GLOBAL: userInfoPane.html]
hellschicken2012
  • Observer

  • 13 posts
  • Corona SDK

Ciao a tutti.

Come già detto sono un principiante che sta cercando di imparare Corona SDK e devo dire che lo trovo stimolante.

 

Stavo provando a fare una APP di prova per capire come funzionano alcune cose, ma mi sono arenato.

 

Qualcuno di voi può aiutarmi??

 

Vorrei che ogni volta che clicco sul tasto "contatore" lo SCORE incrementi di 1 punto il suo valore.

Inoltre vorrei che il risultato venga memorizzato e conservi il punteggio anche quando l'APP viene chiusa e riaperta.

 

Ho allegato i file dell'app.

 

Qualcuno di voi mi può aiutare integrando e correggendo dove ho sbagliato? Perché fatico a capire alcuni passaggi...

Grazie e tutti e buona giornata!!

 

 

 

Attached Files



[TOPIC: post.html]
#2

Christopher Bishop

[GLOBAL: userInfoPane.html]
Christopher Bishop
  • Contributor

  • 416 posts
  • Corona SDK

Per la prima parte della tua domanda 
local TotalScore = 0
 
Per la seconda parte della tua domanda basta aggiungere 
TotalScore = TotalScore + 1
per il vostro evento touch / tocco del pulsante. 
 
Per la terza parte della tua domanda è necessario guardare a questo tutorial / docs.


[TOPIC: post.html]
#3

hellschicken2012

[GLOBAL: userInfoPane.html]
hellschicken2012
  • Observer

  • 13 posts
  • Corona SDK

Grazie per l'attenzione...

 

Per le prima risposta-

storyboard.state = {}
storyboard.state.score = 0
 
in modo tale da conservare il risultato anche tra scene in un prossimo futuro.
 
Per la seconda risposta ho inserito
 storyboard.state.score = storyboard.state.score + 1
 
purtroppo mi manca la funzione tap da inserire nell'evento. Penso di aver sbagliato come far interagire il TASTO1 con il contatore....


[TOPIC: post.html]
#4

Christopher Bishop

[GLOBAL: userInfoPane.html]
Christopher Bishop
  • Contributor

  • 416 posts
  • Corona SDK

E necessario rimuovere quella roba dallo storyboard, vi imbatterete in tutti i tipi di problemi con questo. Invece fare un oggetto "globale" nel vostro main.lua come stato = {} e aggiungere / rimuovere tutti gli elementi a questo. 
 
Se lo fai sopra allora non si perde lo stato tra le scene :)


[TOPIC: post.html]
#5

hellschicken2012

[GLOBAL: userInfoPane.html]
hellschicken2012
  • Observer

  • 13 posts
  • Corona SDK

avevo già usato i globals

 

ma il problema che non riesco a risolvere è un altro.

 

questo è il mio menu.lua

 

----------------------------------------------------------------------------------
--
-- menu.lua
--
----------------------------------------------------------------------------------
-- Remove ToolBar
display.setStatusBar(display.HiddenStatusBar)
 
--Require
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
local widget = require ("widget")
local _H = display.contentHeight
local _W = display.contentWidth
storyboard.state = {}
storyboard.state.score = 0
 
 
 
function scene:createScene( event )
   
--TAST0 1
    local group = self.view
    local function scena1()
    storyboard.gotoScene("scena1")
    end
    
    local tasto1 = widget.newButton {
    defaultFile = "img/tasto1-rollover-a.png",
    overFile = "img/tasto1-rollover-b.png",
    onRelease = scena1
    }
    tasto1.x = _W/2
    tasto1.y = 800
 
       
    -- CONTATORE
    
    local function tasto1Tap( event )
    storyboard.state.score = storyboard.state.score + 1
    return true
    end
    tasto1:addEventListener( "tap", tasto1Tap )
    
    
    local scoreNumber = display.newText(storyboard.state.score, 200, 0, nil, 30)
    scoreNumber.x = _W/2 +50
    scoreNumber.y = 900
 
 
 
    local scoreText = display.newText("SCORE:", 0, 0, nil, 30)
    scoreText.x = _W/2 -50
    scoreText.y = 900
    
    group:insert(tasto1)
 
    
 
    
-- TASTO 3 
    local tasto3 = widget.newButton{
      onRelease = doSomething,
      defaultFile = "img/tasto3-rollover-a.png",
      overFile = "img/tasto3-rollover-b.png",
    }
 
    tasto3.x = _W/2
    tasto3.y = 1000
 
    function tasto3:tap(event)
        system.openURL("http://www.google.it")
        end
        
    tasto3:addEventListener("tap", tasto3)
    group:insert(tasto3)
 
 
 
end
scene:addEventListener( "createScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )
return scene


[TOPIC: post.html]
#6

Christopher Bishop

[GLOBAL: userInfoPane.html]
Christopher Bishop
  • Contributor

  • 416 posts
  • Corona SDK

Ok, quindi la prima parte del tuo problema e che si sta aggiungendo un evento "tap" per i widget pulsante quindi vorrei cominciare da lì perche il codice sta creando problemi. 
 
Vedere l'esempio qui sotto, i pulsanti di widget gia hanno un proprio costruito nelle funzioni rubinetto / touch. 
 
----------------------------------------------------------------------------------
--
-- menu.lua
--
----------------------------------------------------------------------------------
-- Remove ToolBar
display.setStatusBar(display.HiddenStatusBar)
 
--Require
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
local widget = require ("widget")
local _H = display.contentHeight
local _W = display.contentWidth
storyboard.state = {}
storyboard.state.score = 0
 
 
 
function scene:createScene( event )
   
--TAST0 1
    local group = self.view
    local scoreNumber = display.newText(storyboard.state.score, 200, 0, nil, 30)
    scoreNumber.x = _W/2 +50
    scoreNumber.y = 900

    local scoreText = display.newText("SCORE:", 0, 0, nil, 30)
    scoreText.x = _W/2 -50
    scoreText.y = 900
	
    local tasto1 = widget.newButton {
		defaultFile = "img/tasto1-rollover-a.png",
		overFile = "img/tasto1-rollover-b.png",
		onRelease = function()
			storyboard.state.score = storyboard.state.score + 1
			storyboard.gotoScene("scena1")
		end
    }
    tasto1.x = _W/2
    tasto1.y = 800
    group:insert(tasto1)
 
    
-- TASTO 3 
    local tasto3 = widget.newButton{
      onRelease = function()
        system.openURL("http://www.google.it")
	  end,
      defaultFile = "img/tasto3-rollover-a.png",
      overFile = "img/tasto3-rollover-b.png",
    }
 
    tasto3.x = _W/2
    tasto3.y = 1000
 
end

scene:addEventListener( "createScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )
return scene

 



[TOPIC: post.html]
#7

hellschicken2012

[GLOBAL: userInfoPane.html]
hellschicken2012
  • Observer

  • 13 posts
  • Corona SDK

Purtroppo non riesco ad inserire la funzione tap sul tasto1 per far si che lo score aumenti di  1



[TOPIC: post.html]
#8

Christopher Bishop

[GLOBAL: userInfoPane.html]
Christopher Bishop
  • Contributor

  • 416 posts
  • Corona SDK

Perche no?



[TOPIC: post.html]
#9

ale

[GLOBAL: userInfoPane.html]
ale
  • Contributor

  • 174 posts
  • Corona SDK

Ciao,

 

ho modificato il tuo file menu.lua, adesso il contatore viene incrementato di 1 ogni volta che clicchi il pulsante,

non è necessario aggiungere un altra funzione tap, il pulsante chiama già una funzione sull'evento onRelease,

almeno, se ho capito bene credo che sia questo quello che stavi cercando di fare.

 

Ale

 

 
----------------------------------------------------------------------------------
--
-- menu.lua
--
----------------------------------------------------------------------------------
-- Remove ToolBar
display.setStatusBar(display.HiddenStatusBar)
--Require
local storyboard = require( "storyboard" )
local scene = storyboard.newScene()
local widget = require ("widget")
local _H = display.contentHeight
local _W = display.contentWidth
local scoreNumber
local  score = 0
function scene:createScene( event )
   
--TAST0 1
    local group = self.view
    local function scena1()
    score = score +1
    scoreNumber.text = score    
    storyboard.gotoScene("scena1")
    end
    local tasto1 = widget.newButton {
    defaultFile = "img/tasto1-rollover-a.png",
    overFile = "img/tasto1-rollover-b.png",
    onRelease = scena1
    }
    tasto1.x = _W/2
    tasto1.y = 800
      
    -- CONTATORE
    
    scoreNumber = display.newText(score, 200, 0, nil, 30)
    scoreNumber.x = _W/2 +50
    scoreNumber.y = 900
    local scoreText = display.newText("SCORE:", 0, 0, nil, 30)
    scoreText.x = _W/2 -50
    scoreText.y = 900
    group:insert(tasto1)
   
-- TASTO 3
    local tasto3 = widget.newButton{
      onRelease = doSomething,
      defaultFile = "img/tasto3-rollover-a.png",
      overFile = "img/tasto3-rollover-b.png",
    }
    tasto3.x = _W/2
    tasto3.y = 1000
    function tasto3:tap(event)
        system.openURL("http://www.google.it")
        end
        
    tasto3:addEventListener("tap", tasto3)
    group:insert(tasto3)
end
scene:addEventListener( "createScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )
return scene
 



[TOPIC: post.html]
#10

hellschicken2012

[GLOBAL: userInfoPane.html]
hellschicken2012
  • Observer

  • 13 posts
  • Corona SDK

Ciao Ale!!

Grazie dell'intervento!! Sei stato gentilissimo..

ho letto solo ora perché ero fuori per lavoro...

 

Ero comunque riuscito ad incrementare il contatore, anche se come hai scritto tu sembra più fluido...

 

Posso abusare ancora della tua gentilezza e capacità per capire un paio di cose?

Ad esempio, come faccio per far si che il contatore non venga mai cancellato quando si esce dall'applicazione? Mi servirebbe che resti visualizzato sempre il numero di click anche dopo 1 mese che non apro l'app...

 

Inoltre provando le scene in questa maniera MI SEMBRA che l'app risulti più pesante.. sarebbe meglio lasciar stare le scene e fare tutto sul main.lua?



[TOPIC: post.html]
#11

ale

[GLOBAL: userInfoPane.html]
ale
  • Contributor

  • 174 posts
  • Corona SDK

Ciao,

 

per mantenere il valore del contatore anche dopo aver chiuso l'app devi scrivere il valore quando viene aggiornato e poi rileggerlo quando l'app viene rilanciata.

Per fare questo ci sono vari modi e vari moduli che possono tornarti utili. Io uso ormai da anni la Preference Library, che puoi trovare su Code Exchange http://code.coronalabs.com/code/preference-library-save-data-files-tables-numbers-strings-and-boolean

 

Ci sono anche altre librerie che fanno la stessa cosa, ma questa è facile da implementare, e soprattutto è solida e funziona!

Per utilizzarla devi prima importare il modulo di libreria:

local preference = require "preference"

 

Poi per salvare il valore del contatore:

preference.save{ contatore=valoreContatore }

 

Per rileggere il valore salvato:

valoreContatore = preference.getValue("contatore")

 

Di solito funziona al primo colpo.

 

Per lavorare con le scene è MANDATORIO usare sempre le librerie "storyboard" o "composer", il main.lua di solito viene usato come entry point dell'applicazione e deve contenere pochissime istruzioni.

Se crei un progetto nuovo con Corona nella modalità "game" la struttura delle scene viene già creata dall'SDK.

 

Ale
 



[TOPIC: post.html]
#12

hellschicken2012

[GLOBAL: userInfoPane.html]
hellschicken2012
  • Observer

  • 13 posts
  • Corona SDK

Grazie Ale...

appena ho un po' di tempo studio bene i tuoi suggerimenti!!!

A presto!!




[topic_controls]
[/topic_controls]