2013-05-30 5 views
6

Mon jeu est en haute définition, et j'utilise beaucoup d'images HD et de feuilles de sprites, occupant BEAUCOUP de mémoire de texture. Le résultat est que je reçois un écran noir laid avant que ma scène se charge, s'étendant sur quelques secondes. Donc je veux faire un écran de chargement. En fait deux. Un pour mon menu principal et un pour mon jeu principal. J'ai beaucoup cherché toute la journée, mais je n'ai pas trouvé d'étapes pour faire un écran de chargement.Comment créer un écran de chargement dans Corona SDK?

Ce que je veux faire:

-Avoir un écran de chargement, avec juste un texte disant « LOADING ... » et un autre texte avec un pourcentage qui calcule combien mes actifs suivants d'écran ont chargé. -Après avoir terminé, je veux supprimer mon écran de chargement et démarrer ma scène de menu principal, ou ma scène de jeu principale, sans délai.

Je développe pour Android, mais tous les commentaires pour iPhone sont les bienvenus.

Comment le storyboard sait-il si le suivi de mes scènes est chargé et dans quel pourcentage? Où devrais-je mettre mes nouveauxImageRects? Je n'ai pas pu trouver un seul tutoriel.

Répondre

7

Dans votre main.lua vous devez créer une fonction loadAlImages() où vous allez charger vos images HD et 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) 

Maintenant, si vous voulez afficher et mettre à jour un autre texte avec un pourcentage qui calcule la quantité de vos actifs d'écran suivants ont chargé, vous devez créer vos images, sprites avec .isVisible = false et quand ils sont tous créés .isVisible = true. Vous pouvez mettre du code qui met à jour le pourcentage de texte après avoir créé certaines images.

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) 

Je pense que vous pouvez mettre tous vos fichiers images dans un groupe d'affichage et définissez .isVisible = false sur ce groupe. Cela vous permettra d'économiser quelques lignes de code. La même chose pour .alpha = 0


Il y a plusieurs façons. Vous pouvez déclarer vos variables, puis les créer dans la fonction loadAlImages() ou vous pouvez les placer toutes dans une table et utiliser cette table pour obtenir l'image que vous voulez. Le premier exemple:

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 

Exemple avec la table:

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 

Plus d'infos:
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

Est-ce que toutes les images et les sprites doivent être locaux? ou mondial? Parce que je veux utiliser certains d'entre eux avec un événement "tap" pour ajouter des fonctionnalités. – user2347313

+0

Merci beaucoup! j'ai voté – user2347313

1

Je suppose que, vous précharger toutes les images avant de les utiliser dans une scène ..

display.newImage() 

fonction ferait. Voici donc ce que vous devez faire:

1.Ne faites rien avec des images mais appelez une image de chargement avec la fonction display.newImage(). Cela affichera un écran de chargement. Après avoir appelé cela, attendez 500ms et appelez toutes les autres images. Lorsque le jeu devrait aller au menu principal, retirer l'écran de chargement Je veux dire:

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

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

Je ne comprends pas. J'ai un fichier menu.lua, qui est aussi mon fichier main.lua. Je charge toutes les images là-bas, mais quand j'essaie de le faire fonctionner, un écran noir apparaît pendant plusieurs secondes puis il démarre. Où dois-je pré-charger les fichiers? Dans quel fichier .lua? Chaque fichier .lua n'est-il pas autonome? Je suis totalement nouveau à Corona. – user2347313