2013-05-30 14 views
6

Moja gra to High Definition, a ja używam wielu obrazów HD i spritesheets, zajmując dużo pamięci tekstur. Rezultatem jest to, że dostaję brzydki czarny ekran przed załadowaniem mojej Sceny, rozciągając się na kilka sekund. Więc chcę zrobić ekran ładowania. Właściwie dwa. Jeden dla mojego głównego menu i jeden dla mojej głównej gry. Dużo przeszukałem cały dzień, ale nie znalazłem żadnych kroków do zrobienia ekranu ładowania.Jak utworzyć ekran ładowania w Corona SDK?

Co chcę zrobić:

-Having ekran ładowania, a tylko tekst z napisem „loading ...” i kolejny tekst z odsetek, który oblicza, ile moje kolejne aktywa ekranu zostały załadowane.

-Po zakończeniu pracy, chcę natychmiast usunąć ekran ładowania i rozpocząć scenę głównego menu lub moją główną grę.

Pracuję dla Androida, ale wszelkie komentarze do iPhone'a również są mile widziane.

W jaki sposób scenorys będzie wiedział, czy mój scenariusz jest załadowany iw jakim stopniu? Gdzie powinienem umieścić moje newImageRects? Nie mogłem znaleźć ani jednego samouczka.

Odpowiedz

7

W swojej main.lua należy utworzyć funkcję loadAlImages() gdzie można załadować wszystkie obrazy HD i 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) 

Teraz, jeśli chcesz pokazać i zaktualizować kolejny tekst z odsetek, który oblicza, ile Kolejne aktywa ekran załadowaniu należy tworzyć obrazy, duszki z .isVisible = false i kiedy są wszystkie utworzone zmiany .isVisible = true. Możesz wstawić kod aktualizujący tekst procentowy po utworzeniu niektórych obrazów.

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) 

myślę, że można umieścić wszystkie swoje pliki obrazów w jednym grupy wyświetlacza i ustawić .isVisible = false na tej grupie. Pozwoli to zaoszczędzić trochę linii kodu. To samo dla .alpha = 0


Istnieje wiele sposobów. Możesz zadeklarować swoje zmienne, a następnie utworzyć je w funkcji loadAlImages() lub możesz umieścić je wszystkie w tabeli i użyć tej tabeli, aby uzyskać pożądany obraz. Pierwszy przykład:

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 

Przykład z tabeli:

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 

Więcej informacji:
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

Czy wszystkie obrazy i duszki powinny być lokalne? czy globalny? Bo chcę użyć niektórych z nich z wydarzeniem "dotknij", aby dodać funkcjonalność. – user2347313

+0

Dziękuję bardzo! głosowałem – user2347313

1

Zakładam, że jesteś przekręceniem wszystkie obrazy przed ich użyciem w scenie ..

display.newImage() 

funkcja będzie zrobić. Oto, co powinieneś zrobić:

1. Nic nie robić ze zdjęciami, ale wywołać obraz ładujący za pomocą funkcji display.newImage(). Spowoduje to wyświetlenie ekranu ładowania. Po wywołaniu tego, odczekaj 500 ms i wywołaj wszystkie pozostałe obrazy. Kiedy gra powinna przejść do menu głównego, należy usunąć ekran ładowania to znaczy:

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

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

ja nie rozumiem. Mam plik menu.lua, który jest także moim plikiem main.lua. Ładuję tam wszystkie obrazy, ale kiedy próbuję uruchomić, pojawia się czarny ekran przez kilka sekund, a następnie zaczyna. Gdzie mogę wstępnie załadować pliki? W jakim pliku .lua? Czy nie każdy plik .lua jest autonomiczny? Jestem całkowicie nowy w corona. – user2347313

Powiązane problemy