Aiuto app tipo ant smasher

 Ciao mi servirebbe aiuto ho fatto questa app dove spawnano delle palline e mi servirebbe sapere come fare a mettere che quando una di queste bolle viene toccata si elimina e aggiunge un punto

questo e il codice

local W = contentWidth

local H = contentHeight

local score = 0

local scoreIncrease = 1

local scoreNum = display.newText(“0”,460,5,“Arial”,15)

– Your code here

 local bolle = display.newGroup()

 local perso

 scoreNum:toFront()

 imm = {

  “moon.png”,

  “baz.png”,

  “tod.png”

}

 function Generassi (event)

 indice = math.random(1,3)

 pos_y = math.random(0,768)

 vel = math.random(2000,6000)

 ball = display.newImage (imm[indice], 1024, pos_y)

 bolle:insert(  ball )

 transition.moveTo(ball, {time = vel , x= 0, y = pos_y})

end

 t1 = timer.performWithDelay( 100, Generassi, - 1)

 function update (event)

  if ( bolle.numChildren ~= 0  ) then

  for i = 1, bolle.numChildren do

  if ( bolle[i] ~= nil) then

  if (bolle[i].x < 1) then

     print(i)

     bolle[i]:removeSelf ()

     bolle[i] = nil

  end

 end

 end

end

end

Runtime:addEventListener(“enterFrame”, update)

Ciao,

per fare quello che chiedi devi aggiungere un event listener di tipo “touch” ad ogni oggetto/immagine che crei, in questo modo quando tocchi l’oggetto la funzione event handler potrà gestirlo rimuovendolo e aggiornando il contatore.

Questo è il codice che ho aggiornato.

Ale

&nbsp; display.setStatusBar( display.HiddenStatusBar ) local W = contentWidth local H = contentHeight local score = 0 local scoreIncrease = 1 local scoreNum = display.newText("0",400,25,"Arial",35) -- Your code here local bolle = display.newGroup() local perso &nbsp; scoreNum:toFront() &nbsp; imm = { &nbsp; "moon.png", &nbsp; "baz.png", &nbsp; "tod.png" } &nbsp; local function onTouch( event ) &nbsp;&nbsp; &nbsp;local t = event.target &nbsp;&nbsp;&nbsp; local phase = event.phase &nbsp;&nbsp;&nbsp; if "began" == phase then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print( "Touched!" ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; score = score + 1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scoreNum.text = score &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:removeEventListener( "touch", onTouch ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:removeSelf () &nbsp;&nbsp;&nbsp; end &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return true end function Generassi (event) &nbsp; &nbsp;&nbsp; &nbsp; indice = math.random(1,3) &nbsp;&nbsp; &nbsp; pos\_y = math.random(0,768) &nbsp;&nbsp; &nbsp; vel = math.random(2000,6000) &nbsp;&nbsp; &nbsp; --ball = display.newImage (imm[indice], 1024, pos\_y) &nbsp;&nbsp; &nbsp; ball = display.newCircle(1024, pos\_y, 30) &nbsp;&nbsp; &nbsp; ball:addEventListener( "touch", onTouch ) &nbsp;&nbsp; &nbsp; bolle:insert(&nbsp; ball ) &nbsp;&nbsp; &nbsp; transition.moveTo(ball, {time = vel , x= 0, y = pos\_y}) end &nbsp; &nbsp;t1 = timer.performWithDelay( 100, Generassi, - 1) &nbsp; &nbsp; &nbsp;function update (event) &nbsp; if ( bolle.numChildren ~= 0&nbsp; ) then &nbsp; for i = 1, bolle.numChildren do &nbsp; if ( bolle[i] ~= nil) then &nbsp; if (bolle[i].x \< 1) then &nbsp;&nbsp;&nbsp;&nbsp; --print(i) &nbsp;&nbsp;&nbsp;&nbsp; bolle[i]:removeSelf () &nbsp;&nbsp;&nbsp;&nbsp; bolle[i] = nil &nbsp; end &nbsp;end &nbsp;end end end Runtime:addEventListener("enterFrame", update) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

Ciao ale ho fatto in un altro modo grazie comunque Ho un xperia e4 mi servirebbe sapere come fare a disattivare i tasti home back e task quando sonora schermo come in questo caso

Ciao,

non conosco xperia. Ma ho paura che non si possa fare.

Ale

nono ho trovato bastava fare native.setProperty ( “androidSystemUiVisibility”, “immersiveSticky”)

ma sai come si fa a salvare i migliori punteggi

Ciao,

ah si , con le native properties, Android lo conosco lo stretto necessario :slight_smile:

Per salvare i punteggi e recuperarli usa la preference library di Satheesh,

https://code.coronalabs.com/code/preference-library-save-data-files-tables-numbers-strings-and-boolean

è facile da usare e fa quello che deve fare.

Ale

L Avevo già visto ma non avevo capito come usarlo e come fare in modo che il valore sia in display
E che salvi solo il Best score

Ciao

esempio preference:

local preference = require "preference" local myScore --Salva punteggio preference.save{score=myScore} --Leggi punteggio myScore = preference.getValue("myScore")

ovviamente devi aggiungere il tuo codice per gestire il valore, min, max, ecc.

Ale

io ho messo cos^ ma non parte

if ( score > scorebest) then

              preference.save(scorebest == score)

              scorebest = preference.getValue(“scorebest”)

              local scorebestNum = display.newText(sceneGroup,scorebest,480,27,“EASansCurves-Regular”,50)

            end

mi da degli errori nel file preference.lua alla riga 333

scorebest non  può essere chiave e variabile allo stesso tempo, inoltre devi usare = e non ==

local score, scorebest &nbsp; if ( score \> scorebest) then &nbsp;&nbsp;&nbsp;&nbsp; preference.save{theBestScore = score} end &nbsp; --poi quando devi rileggere &nbsp; scorebest = preference.getValue("theBestScore") &nbsp; &nbsp;

Inoltre, attenzione alle parentesi,  {} e () hanno comportamenti diversi

Ciao,

Ale

Ok ma mi dava errore sull = comunque ok
Se io metto che scorebest 0 verrà inizializzato come zero ma solo quando non hai mai giocato è zero quindi come fare in modo che venga inizializzato come l ultimo score migliore anche chiudendo l applicazione

ma poi come faccio a metterlo graficamente dopo che lo legge comunque a me serve che si veda e mi da che thebestscore è nil quindi non parte se lo metto come stringa da visualizzare! aiuto :wink:

Allora, qui si tratta di logica di programmazione non c’entrano più Corona SDK e LUA!

Comunque, se non ho capito male, lo pseudo codice potrebbe essere questo:

Inizio il gioco, ->  bestscore = 0 , score = 0

Leggo bestscore dalle preferences.

ATTENZIONE!

Devi prima verificare che non sia nullo quindi:

if (preference.getValue("theBestScore") ~= nil) then &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; bestscore = preference.getValue("theBestScore") end

Gioco e faccio dei punti, per ogni punto ->  score = score + 1

Finisce la sessione di gioco, salvo il punteggio solo se score > bestscore

if (score \> bestscore) then &nbsp;&nbsp;&nbsp; preference.save{ theBestScore = score} end

Chiudo l’app.

Rilancio l’app e preference.getValue leggerà l’ultimo valore salvato

Per stamparlo graficamente nella label che avrai creato con display.newText basterà cambiare il testo:

scorebestNum.text = bestscore

Ciao,

Ale

Ale ho quasi risolto con un tutorial di corona che mi faceva creare un modulo
Che aveva funzioni come score.save() e vabbe comunque grazie

Ok meglio così!

L’importante è che funzioni :slight_smile:

Ciao

Ale

Ale mi puoi aiutare grazie scusa il disturbo 

ho questo codice che indica che quando lo tocco deve scomparire e a volte mi da errore

attempt to call method removeSelf quindi mi piacerebbe saper come toglierlo grazie se sai anche metodi alternativi per fare questo ok

function balla (self,event) if (event.phase == "began") then timer.performWithDelay(1, function() self:removeSelf() end ) score = score + 1 scoreNum.text = score\*scoreIncrease end end

Ciao,

dovrei vedere il resto del codice per dare indicazioni più precise.

Se non è necessario attendere 1 secondo prima di rimuovere puoi togliere timer.performWithDelay.

Inoltre se function balla() è un event handler e mi sembra di si, non vedo la necessità di passare due parametri (self, event).

Infine, ogni oggetto rimosso con removeSelf() deve essere posto a nil perchè la garbage collection lo rimuova definitivamente dalla memoria.

Potrebbe essere espressa meglio in questo modo (se è un event handler), ma è solo una mia ipotesi non potendo vedere il resto del codice.

&nbsp; function balla (event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local t = event.target &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; if (event.phase == "began") then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:removeSelf() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t = nil &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; score = score + 1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scoreNum.text = score\*scoreIncrease &nbsp;&nbsp;&nbsp; end &nbsp; end &nbsp;

Ciao

Ale

Ale sto usando texturepacker sei capace ad usarlo tu ?

avrei bissogno di un consiglio

Ciao,

per fare quello che chiedi devi aggiungere un event listener di tipo “touch” ad ogni oggetto/immagine che crei, in questo modo quando tocchi l’oggetto la funzione event handler potrà gestirlo rimuovendolo e aggiornando il contatore.

Questo è il codice che ho aggiornato.

Ale

&nbsp; display.setStatusBar( display.HiddenStatusBar ) local W = contentWidth local H = contentHeight local score = 0 local scoreIncrease = 1 local scoreNum = display.newText("0",400,25,"Arial",35) -- Your code here local bolle = display.newGroup() local perso &nbsp; scoreNum:toFront() &nbsp; imm = { &nbsp; "moon.png", &nbsp; "baz.png", &nbsp; "tod.png" } &nbsp; local function onTouch( event ) &nbsp;&nbsp; &nbsp;local t = event.target &nbsp;&nbsp;&nbsp; local phase = event.phase &nbsp;&nbsp;&nbsp; if "began" == phase then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print( "Touched!" ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; score = score + 1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scoreNum.text = score &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:removeEventListener( "touch", onTouch ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t:removeSelf () &nbsp;&nbsp;&nbsp; end &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return true end function Generassi (event) &nbsp; &nbsp;&nbsp; &nbsp; indice = math.random(1,3) &nbsp;&nbsp; &nbsp; pos\_y = math.random(0,768) &nbsp;&nbsp; &nbsp; vel = math.random(2000,6000) &nbsp;&nbsp; &nbsp; --ball = display.newImage (imm[indice], 1024, pos\_y) &nbsp;&nbsp; &nbsp; ball = display.newCircle(1024, pos\_y, 30) &nbsp;&nbsp; &nbsp; ball:addEventListener( "touch", onTouch ) &nbsp;&nbsp; &nbsp; bolle:insert(&nbsp; ball ) &nbsp;&nbsp; &nbsp; transition.moveTo(ball, {time = vel , x= 0, y = pos\_y}) end &nbsp; &nbsp;t1 = timer.performWithDelay( 100, Generassi, - 1) &nbsp; &nbsp; &nbsp;function update (event) &nbsp; if ( bolle.numChildren ~= 0&nbsp; ) then &nbsp; for i = 1, bolle.numChildren do &nbsp; if ( bolle[i] ~= nil) then &nbsp; if (bolle[i].x \< 1) then &nbsp;&nbsp;&nbsp;&nbsp; --print(i) &nbsp;&nbsp;&nbsp;&nbsp; bolle[i]:removeSelf () &nbsp;&nbsp;&nbsp;&nbsp; bolle[i] = nil &nbsp; end &nbsp;end &nbsp;end end end Runtime:addEventListener("enterFrame", update) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;