¿Cómo puedo crear una pantalla de carga en Corona SDK?

Mi juego es de alta definición, y yo uso un montón de imágenes HD y spritesheets, tomando un montón de memoria de textura. El resultado es que obtengo una fea pantalla negra antes de que mi escena se cargue, extendiéndose unos segundos. Así que quiero hacer una pantalla de carga. En realidad dos. Uno para mi menú principal y uno para mi juego principal. Busqué mucho el día entero, pero no encontré ningún paso para hacer una pantalla de carga.

Lo que quiero hacer:

-Tener una pantalla de carga, con solo un texto diciendo "CARGANDO …" y otro texto con un porcentaje que calcula cuánto han cargado mis siguientes activos de pantalla.

-Después de terminar, quiero quitar mi pantalla de carga e iniciar mi escena principal del menú, o mi escena principal del juego, sin demora.

Estoy desarrollando para Android, pero los comentarios para el iPhone también son bienvenidos.

¿Cómo sabe el storyboard si mi escena siguiente está cargada y en qué porcentaje? ¿Dónde debo poner mis newImageRects? No pude encontrar un solo tutorial.

En su main.lua debe crear una función loadAlImages () donde cargará todas sus imágenes HD y 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 ) 

Ahora, si quieres mostrar y actualizar otro texto con un porcentaje que calcula cuánto te han cargado los activos de la siguiente pantalla, debes crear tus imágenes, los sprites con .isVisible = false y cuando se creen, cambia .isVisible = true . Puede poner algún código que actualice el porcentaje de texto después de crear algunas imágenes.

 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 ) 

Creo que puedes poner todos tus archivos de imágenes en un grupo de visualización y establecer .isVisible = false en este grupo. Esto le ahorrará algunas líneas de código. Lo mismo para α = 0


Hay muchas maneras. Puede declarar sus variables y luego crearlas en la función loadAlImages () o puede ponerlas todas en una tabla y usar esa tabla para obtener la imagen que desea. El primer ejemplo:

 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 

Ejemplo con la tabla:

 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 

Más información:
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

Supongo que, precargar todas las imágenes antes de usarlos en una escena ..

 display.newImage() 

Función haría eso. Así que aquí está lo que debe hacer:

1. No hacer nada con imágenes, sino llamar a una imagen de carga con la función display.newImage (). Esto mostrará una pantalla de carga. Después de llamar a eso, espere 500ms y llame a todas las demás imágenes. Cuando el juego debe ir al menú principal, quitar la pantalla de carga quiero decir:

 local loadImg = display.newImageRect( "loading.png" .. blah blah ) timer.performWithDelay( 500, function() -- load all other images then main() end, 1 ) 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.