Как создать экран загрузки в Corona SDK?

моя игра высокой четкости, и я использую много HD-изображений и спрайтов, занимая много памяти текстуры. В результате я получаю уродливый черный экран, прежде чем моя сцена загружается, простираясь на несколько секунд. Поэтому я хочу сделать загрузочный экран. Вообще-то два. Один для моего главного меню и один для моей основной игры. Я много искал весь день, но я не нашел никаких шагов для создания экрана загрузки.

Что я хочу сделать:

- наличие экрана загрузки, только с текстом говоря " загрузка..."и еще один текст с процентом, который вычисляет, сколько загрузили мои следующие активы экрана.

- после того, как я закончу, я хочу удалить экран загрузки и начать сцену главного меню или мою главную игровую сцену без задержки.

Я разрабатываю для Android, но любые комментарии для iPhone также приветствуются.

как раскадровка знает, загружена ли моя следующая сцена и в каком проценте? Где я должен поставить мой newImageRects? Я не мог найдите один учебник.

2 ответов


в главном.Lua вы должны создать функцию loadAlImages () где вы будете загружать все ваши изображения HD и 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 )

теперь, если вы хотите показать и обновить другой текст с процентом, который вычисляет, сколько ваши следующие активы экрана загрузили вы должны создать свои изображения, спрайты с .isVisible=false и когда они все созданы изменить .isVisible=true. Вы можете поместить некоторый код, который обновляет процент текста после создания некоторых изображений.

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 )

Я думаю, вы можете поместить все ваши файлы изображений в одном отобразить группу и set .isVisible=false по этой группе. Это сэкономит вам несколько строк кода. То же самое для .Альфа=0


есть много способов. Вы можете объявить свои переменные, а затем создать их в функции loadAlImages (), или вы можете поместить их все в таблицу и использовать эту таблицу для получения изображения хотеть. Первый пример:

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

пример с таблицей:

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

больше info:
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


Я предполагаю, что вы предварительно загружаете все изображения перед их использованием в сцене..

display.newImage()

функция сделает это. Так вот что вы должны сделать:

1.Ничего не делайте с изображениями, но вызывайте изображение загрузки с дисплеем.newImage (функция). Это отобразит экран загрузки. После вызова этого подождите 500ms и вызовите все другие изображения. Когда игра должна перейти в Главное меню, удалите экран загрузки Я имею в виду:

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

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