Corona SDK和Retina / Multi-res中的纹理图集

时间:2012-06-29 17:56:42

标签: corona

我试图在在线文档中找到更多信息,但他们在这方面仍然有点缺乏。

使用新纹理atlas API处理多种分辨率的正确方法是什么?我应该为每个分辨率提供不同的数据文件吗? Corona SDK会自动找到正确的文件,还是需要自己处理分辨率检测?

即使只是指向应用此文件的文档页面的指针也足够了!

非常感谢!

1 个答案:

答案 0 :(得分:0)

Corona将正确加载图像文件(.png或.jpg),并手动加载图纸文件然后缩放...

如果您在制作适用于所有分辨率的工作表文件时遇到困难,一种好方法是手动加载适合该分辨率的工作表,然后使用.xScale和.yScale来更正分辨率。

我将发布我自己的Atlas解决方案处理代码:

-- Mauricio Gomes
-- Kidoteca point class

local scaleString = "";
local scaleNumber = 1;
local errorMessage = "ERROR: Please call autoResolution.init";
local errorFunction = function() print(errorMessage); return errorMessage end;

local autoResolution = {};

function autoResolution.requireSheet( sheet )
    if autoResolution.SCALE == errorFunction then
        return errorFunction();
    end
    sheet = string.gsub(sheet, "/", ".");
    return require(sheet .. scaleString).sheet;
end

function autoResolution.requireInfo( sheet )
    if autoResolution.SCALE == errorFunction then
        return errorFunction();
    end
    sheet = string.gsub(sheet, "/", ".");
    return require(sheet .. scaleString);
end

function autoResolution.imageName( fileName, extension )
    if autoResolution.SCALE == errorFunction then
        return errorFunction();
    end
    return fileName .. scaleString .. "." .. extension;
end

-- variables about the scale settings

function autoResolution.init()
    if display.contentScaleX <= 0.25 then
        scaleString = "@4";
        scaleNumber = 0.25;
    elseif display.contentScaleX <= 0.7 then
        scaleString = "@2";
        scaleNumber = 0.5;
    end

    autoResolution.SCALE = scaleNumber;
end

autoResolution.SCALE = errorFunction;

return autoResolution;

init函数当然使用我的公司(Kidoteca)使用的设置:后缀为@ 2和@ 4,而且由于我们的一些内部原因,不完全是@ 2。