Как создать экран загрузки в 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 )