【问题标题】:How do I create a Loading screen in Corona SDK?如何在 Corona SDK 中创建加载屏幕?
【发布时间】:2013-05-30 22:26:52
【问题描述】:

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

我想做什么:

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

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

我正在为 Android 开发,但也欢迎任何适用于 iPhone 的 cmets。

情节提要如何知道我的后续场景是否已加载以及加载百分比?我应该把 newImageRects 放在哪里?我找不到一个教程。

【问题讨论】:

    标签: android iphone loading coronasdk


    【解决方案1】:

    在您的 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

    【讨论】:

    • 所有图像和精灵都应该是本地的吗?还是全球性的?因为我想将其中一些与“点击”事件一起使用来添加功能。
    【解决方案2】:

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

    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 )
    

    【讨论】:

    • 我不明白。我有一个 menu.lua 文件,它也是我的 main.lua 文件。我在那里加载了所有图像,但是当我尝试运行它时,黑屏会出现几秒钟,然后它就会启动。我在哪里预加载文件?在什么 .lua 文件中?不是每个 .lua 文件都是自治的吗?我对电晕完全陌生。
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2010-09-26
    相关资源
    最近更新 更多