6

我的游戏是高清的,我使用了大量的高清图像和精灵表,占用了大量的纹理内存。结果是在我的场景加载之前我得到了一个难看的黑屏,持续了几秒钟。所以我想做一个加载屏幕。其实两个。一个用于我的主菜单,一个用于我的主游戏。我整天搜索了很多,但我没有找到任何制作加载屏幕的步骤。

我想做的事:

- 有一个加载屏幕,只有一个文本说“正在加载......”和另一个带有百分比的文本,用于计算我的下一个屏幕资源加载了多少。

- 完成后,我想立即移除加载屏幕并开始我的主菜单场景或主游戏场景。

我正在为 Android 开发,但也欢迎对 iPhone 发表任何评论。

故事板如何知道我的场景是否已加载以及加载百分比?我应该把 newImageRects 放在哪里?我找不到一个教程。

4

2 回答 2

7

在您的 main.lua 中,您应该创建一个函数loadAlImages(),您将在其中加载所有高清图像和精灵表。

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 )

我认为您可以将所有图像文件放在一个显示组中,并在该组上设置.isVisible=false。这将为您节省一些代码行。.alpha=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

更多信息: 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

于 2013-05-30T23:23:49.750 回答
1

我假设,您在场景中使用它们之前预加载所有图像..

display.newImage()

功能会做到这一点。所以这是你应该做的:

1.对图像不做任何事情,而是使用 display.newImage() 函数调用加载图像。这将显示一个加载屏幕。调用之后,等待 500 毫秒并调用所有其他图像。当游戏应该进入主菜单时,删除加载屏幕我的意思是:

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

timer.performWithDelay( 500, function() -- load all other images then main() end, 1 )
于 2013-05-30T22:39:10.370 回答