【问题标题】:Corona SDK - display.newImageRect is not workingCorona SDK - display.newImageRect 不工作
【发布时间】:2013-11-13 18:49:40
【问题描述】:

我有一个相对简单但愚蠢的问题,但令人惊讶的是找不到解决方案:( 我是 Corona SDK 的新手,正在尝试显示图像。所有图像都放置在相对于main.lua 的目录images 目录中。 目前我正在这样做

local IMAGE_DIR = "images";
local bg = display.newImageRect( IMAGE_DIR.. "/bg.png", 570, 360 )
mainScreenGroup:insert(bg)

它运行良好。但根据文档,这里是语法

display.newImageRect( [parentGroup,] filename, [baseDirectory] width, height )

我发现,我可以指定[baseDirectory],而不是连接IMAGE_DIR,而不是手动插入组mainScreenGroup,我可以在一行中指定[parentGroup,]。但我无法让它发挥作用。我已经尝试过。

local bg = display.newImageRect( [mainScreenGroup,] "bg.png", [IMAGE_DIR] 570, 360 )
local bg = display.newImageRect( [mainScreenGroup], "bg.png", [IMAGE_DIR], 570, 360 )
local bg = display.newImageRect( [mainScreenGroup], "/bg.png", [IMAGE_DIR], 570, 360 )
local bg = display.newImageRect( mainScreenGroup, "/bg.png", IMAGE_DIR, 570, 360 )
local bg = display.newImageRect( mainScreenGroup, "bg.png", IMAGE_DIR, 570, 360 )

但以上 5 条语句均无效。我做错了吗?任何帮助表示赞赏。

【问题讨论】:

  • 试试local bg = display.newImageRect( mainScreenGroup, "bg.png", IMAGE_DIR, 570, 360 )

标签: lua coronasdk


【解决方案1】:

baseDirectory 参数不能是任意值,只能使用此处提及的值填充:http://docs.coronalabs.com/api/library/system/pathForFile.html

来自 newImageRect 文档:

baseDirectory(可选)

恒定。从中加载图像数据的路径 文件名。默认为 system.ResourceDirectory(项目文件夹;相同 位置为 main.lua)。有关有效值,请参见 system.pathForFile()。

因此,在您的初始示例中,项目要做的是查找 system.ResourceDirectory/images/bg.png(system.ResourceDirectory 与您的 main.lua 所在的文件夹相同)。

如果仍未显示,请检查 newImageRect 上的问题以确保您的图像可以加载。

此外,对于 Android,您不能依赖使用 system.ResourceDirectory:

安卓

Corona 中的文件访问基于下划线操作系统 因平台而异。在 iOS 设备上,您可以访问所有 上述目录。然而,在 Android 上,没有 文字 system.ResourceDirectory 因为所有资源文件都驻留 在压缩的 APK 文件中。

Corona 允许使用 适当的 API,但它对资源文件的访问权限有限 Android 使用文件 I/O API。具体可以分为以下几种 不能从资源目录中读取:.html、.htm.、.3gp、.m4v、 .mp4、.png、.jpg 和 .ttf。

由于此限制,如果您捆绑了这些类型的文件 在您需要复制到另一个目录的核心目录中,您 必须更改文件名,以便文件 I/O API 可以访问它。 例如,如果你想从资源目录中移动 cat.png 到documents目录,必须重命名为cat.png.txt才可以 复制。详情请见http://docs.coronalabs.com/guide/data/readWriteFiles/index.html

【讨论】:

    【解决方案2】:

    在上一个示例中,文件名bg.png 前不应有“/”。

    local bg = display.newImageRect( mainScreenGroup, "bg.png", IMAGE_DIR, 570, 360 )
    

    【讨论】:

    • 感谢您的回复,我已经尝试过了,但不幸的是它也不起作用。我现在正在编辑我的问题以包含此内容。
    • 好的。你确定你有一个名为 mainScreenGroup 的显示组并且字符串 IMAGE_DIR 不是 nil 吗?
    • 试试这些打印,看看它们是否给你一个字符串和一个表格: print("Directory:",IMAGE_DIR) print("Display group:",mainScreenGroup)
    • 这里是打印语句的输出。目录:图像,显示组:表:0x10e2225e0。而且我相信这两个不是空的,因为我只是用你建议的线替换了完美的线。
    • 嗯,我明白了.. 尝试用 self.view 替换您的显示组。也许您忘记将显示组添加到屏幕上。本地组 = self.view;组:插入(mainScreenGroup);
    【解决方案3】:

    您不能使用 IMAGE_DIR 作为您的基本目录,它必须是文档 herehere 中提到的 4 个之一:

    • system.CachesDirectory
    • system.DocumentsDirectory
    • system.ResourceDirectory
    • system.TemporaryDirectory

    在你的情况下,你仍然需要附加 IMAGE_DIR,但你可以摆脱插入 bg 到组,所以你的代码:

    local IMAGE_DIR = "images/";
    local bg = display.newImageRect( IMAGE_DIR.. "/bg.png", 570, 360 )
    mainScreenGroup:insert(bg)
    

    可以改为:

    local IMAGE_DIR = "images/";
    local bg = display.newImageRect( mainScreenGroup, IMAGE_DIR.."/bg.png", 570, 360 )
    

    正如 Teddy Engel 所说,如果您想在 Android 上使用 system.ResourceDirectory,则需要小心 - 请参阅 docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-31
      • 2014-06-09
      • 2014-10-29
      • 1970-01-01
      • 2016-03-21
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多