1

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

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

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

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

我发现IMAGE_DIR我可以指定[baseDirectory]而不是连接,而不是手动插入组,我可以在一行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 条语句均无效。我做错了吗?任何帮助表示赞赏。

4

3 回答 3

4

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

从 newImageRect 文档:

基本目录(可选)

持续的。从文件名加载图像数据的路径。默认为 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 直接加载图像和音频文件,但它使用文件 I/O API 访问 Android 上的资源文件是有限的。具体来说,无法从资源目录中读取以下类型:.html、.htm.、.3gp、.m4v、.mp4、.png、.jpg 和 .ttf。

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

于 2013-11-11T11:37:13.443 回答
2

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

local bg = display.newImageRect( mainScreenGroup, "bg.png", IMAGE_DIR, 570, 360 )
于 2013-11-11T07:35:59.027 回答
0

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

  • system.Caches目录
  • system.Documents 目录
  • 系统资源目录
  • 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

于 2013-11-13T10:49:40.673 回答