Corona SDK - display.newImageRect不起作用

时间:2013-11-11 07:31:12

标签: lua corona

我有相对简单但愚蠢的问题,但令人惊讶的是找不到解决方案:( 我是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个陈述中没有任何内容有效。我做错了吗?任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

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

来自newImageRect doc:

  

baseDirectory(可选)

     

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

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

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

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

  

的Android

     

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

     

Corona允许使用直接加载图像和音频文件   适当的API,但它对资源文件的访问权限有限   Android使用文件I / O API。具体来说,以下类型可以   不能从资源目录中读取:.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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您不能将IMAGE_DIR用作baseDirectory,它必须是文档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