2013-05-30 16 views
6

Il mio gioco è in alta definizione, e uso molte immagini HD e fogli sprites, occupando un sacco di memoria texture. Il risultato è che ottengo una brutta schermata nera prima che la mia scena si carichi, per alcuni secondi. Quindi voglio fare una schermata di caricamento. In realtà due. Uno per il mio menu principale e uno per il mio gioco principale. Ho cercato molto per tutto il giorno, ma non ho trovato alcuna procedura per creare una schermata di caricamento.Come si crea una schermata di caricamento in Corona SDK?

quello che voglio fare:

-Avere una schermata di caricamento, con solo un testo che dice "Loading ..." e un altro testo con una percentuale che calcola quanto i miei beni schermata successiva hanno caricato.

-Dopo aver terminato, desidero rimuovere la schermata di caricamento e avviare la scena del menu principale o la scena del gioco principale senza alcun ritardo.

Sto sviluppando per Android, ma tutti i commenti per iPhone sono benvenuti.

Come fa lo storyboard a sapere se la mia scena successiva viene caricata e in quale percentuale? Dove dovrei inserire il mio nuovoImageRects? Non sono riuscito a trovare un singolo tutorial.

risposta

7

Nella tua main.lua si dovrebbe creare una funzione loadAlImages() dove potrete caricare tutte le immagini HD e spritesheets.

local loadingText = display.newText("LOADING ...", 0, 0, native.systemFont, 24) 
myText:setTextColor(255, 255, 255) 

local function loadAlImages() 
    --create all your images here. 

    --remove LOADING text 
end 

--if you still see black screen at the start try to increase delay > 500 ms 
timer.performWithDelay(500, loadAlImages, 1) 

Ora, se si desidera visualizzare e aggiornare un altro testo con una percentuale che calcola quanto il vostro patrimonio schermata successiva hanno caricato è necessario creare le immagini, sprite con .isVisible = false e quando vengono creati tutti i cambiamenti .isVisible = true. È possibile inserire del codice che aggiorna il testo percentuale dopo aver creato alcune immagini.

local loadingText = display.newText("LOADING ...", 0, 0, native.systemFont, 24) 
myText:setTextColor(255, 255, 255) 

local function loadAlImages() 
    --create some images here. 
    --update text's percentage to 20% 
    --create some images here. 
    --update text's percentage to 50% 
    --create some sprites here. 
    --update text's percentage to 90% 
    --change **.isVisible=true** for all your created files but **.alpha=0** 
    --update text's percentage to 100% 
    --remove LOADING text 
    --transition .alpha of all images to 1 
end 

timer.performWithDelay(500, loadAlImages, 1) 

penso che si può mettere tutti i file immagini in un unico gruppo di visualizzazione e impostare .isVisible = false su questo gruppo. Questo ti farà risparmiare alcune righe di codice. Lo stesso vale per alfa = 0


Ci sono molti modi. Puoi dichiarare le tue variabili e poi crearle nella funzione loadAlImages() oppure puoi metterle tutte in una tabella e usare quella tabella per ottenere l'immagine che desideri. Il primo esempio:

local image 

local function loadAlImages() 
    --create some images here. 

    image = display.newImageRect("image.png", 100, 100) 
    image:setReferencePoint(display.CenterReferencePoint) 
    image.x = display.contentCenterX 
    image.y = display.contentCenterY 

    --create some sprites here. 
end 

Esempio con la tavola:

local imagesTable = { } 

local function loadAlImages() 
    --create some images here. 

    local image = display.newImageRect("image.png", 100, 100) 
    image:setReferencePoint(display.CenterReferencePoint) 
    image.x = display.contentCenterX 
    image.y = display.contentCenterY 
    imagesTable.image = image 

    --create some sprites here. 
end 

Maggiori informazioni:
http://lua-users.org/wiki/ScopeTutorial
http://www.coronalabs.com/blog/2011/06/21/understanding-lua-tables-in-corona-sdk/
http://lua-users.org/wiki/TablesTutorial

+0

Tutte le immagini e gli sprite dovrebbero essere locali? o globale? Perché voglio usarne alcuni con un evento "tap" per aggiungere funzionalità. – user2347313

+0

Grazie mille! ho votato – user2347313

1

Suppongo che, a pre-caricare tutte le immagini prima di utilizzarli in una scena ..

display.newImage() 

funzione avrebbe fatto. Quindi, ecco cosa dovresti fare:

1.Non fare nulla con le immagini, ma chiamare un'immagine di caricamento con display.new Funzione immagine(). Questo mostrerà una schermata di caricamento. Dopo averlo chiamato, attendi 500 ms e chiama tutte le altre immagini. Quando il gioco dovrebbe andare al menu principale, rimuovere la schermata di caricamento voglio dire:

local loadImg = display.newImageRect("loading.png" .. blah blah) 

timer.performWithDelay(500, function() -- load all other images then main() end, 1) 
+0

io non capisco. Ho un file menu.lua, che è anche il mio file main.lua. Carico tutte le immagini lì, ma quando provo a eseguirlo appare una schermata nera per diversi secondi e poi inizia. Dove precarichi i file? In quale file .lua? Non tutti i file .lua sono autonomi? Sono totalmente nuovo alla corona. – user2347313

Problemi correlati