关于setContentScaleFactor和spriteFrameCache.addSpriteFrames疑惑

在适配多分辨率时,我需要根据分辨率来设置对应的resPath,setDesignResolutionSize,以及setContentScaleFactor。
假如我的设计分辨率为320480,为此我准备了两套美术资源(320480, 640*960),并将这两套美术资源,
分别使用TexturePacker制作成sprites.plist和sprites.png。
然后将它们分别放置到目录iphone/res和iphonehd/res下,如下图:


那么代码如下:

var DesignResolutionSize = cc.size(320, 460);
var SmallResource  = new Resource(cc.size(320, 480), "res/iphone");
var MediumResource = new Resource(cc.size(640, 960), "res/iphonehd");

function setResPathAndScaleFactor()
{
    var frameSize = cc.view.getFrameSize();
    if (frameSize.height > SmallResource.size.height)
    {
        cc.loader.resPath = MediumResource.directory;
        cc.view.setDesignResolutionSize(
            MediumResource.size.width,
            MediumResource.size.height,
            cc.ResolutionPolicy.SHOW_ALL
        );

        cc.director.setContentScaleFactor(Math.min(MediumResource.size.height/DesignResolutionSize.height,
                MediumResource.size.width/DesignResolutionSize.width));
    }
    else
    {
        cc.loader.resPath = SmallResource.directory;
        cc.view.setDesignResolutionSize(
            SmallResource.size.width,
            SmallResource.size.height,
            cc.ResolutionPolicy.SHOW_ALL
        );

        cc.director.setContentScaleFactor(Math.min(SmallResource.size.height/DesignResolutionSize.height,
                SmallResource.size.width/DesignResolutionSize.width));
    }
}



```


main.js代码如下:
cc.game.onStart = function(){
    cc.view.adjustViewPort(true);

    // init res path and scale factor
    setResPathAndScaleFactor();

    // set font size
    setFontSize();

    // resize browser size
    cc.view.resizeWithBrowserSize(true);

    // load resources
    LoaderScene.preload(g_resources, function () {
        // load brain session
        loadBrainSession();

        // add sprite frames
        cc.spriteFrameCache.addSpriteFrames(res.Brain_plist, res.Brain_png);

        // run splash scene
        cc.director.runScene(new SplashScene());
    });
};
cc.game.run();


```


运行后,我得到如下报错:
 

不知道是不是我理解错了,用错了?

Hi, 这是引擎中的一个bug,多谢反馈,我稍后会把修正的PR发给你

参考这个commit中的修改:https://github.com/pandamicro/cocos2d-html5/commit/2759d185022cb5c3840297b7d747374896235420

非常感谢~

我修改后,发现适配多分辨率依然存在问题:
下图1,是我不设置cc.director.setContentScaleFactor(ScaleFactor); 而是将图片元素的定位乘以ScaleFactor来定位,得到的是正常的结果,如下图:


下图2,是我调用 cc.director.setContentScaleFactor(ScaleFactor); 图片元素定位按照320*480设计的位置定位,得到的结果如下图:

那么请问,设置内容缩放因子为2,是将图片缩小为原图的2倍吗?

@ fysp 求继续关注此问题。

楼主解决了吗?

android下有同样的问题。

无解。目前只能每个sprite单独设置自己的缩放因子,然后根据FrameSize来进行比例布局,否则只要移植就会乱。
希望开发团队能关注下此问题。