Cocos2d-x 3.0中setDesignResolutionSize设置NO_BORDER属性的奇怪问题

在AppDelegate::applicationDidFinishLaunching()中加了下面一行代码:

glview->setDesignResolutionSize(600, 800, ResolutionPolicy::NO_BORDER);
```


Scene* HelloWorld::createScene()的代码如下:
Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::createWithPhysics();
    scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
    // 'layer' is an autorelease object
    auto layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}
```


在bool HelloWorld::init()中加了如下代码:
Sprite *edgeSp = Sprite::create();
    auto boundBody = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 3);
    boundBody->getShape(0)->setRestitution(1.0f);
    boundBody->getShape(0)->setFriction(0.0f);
    boundBody->getShape(0)->setDensity(1.0f);
    edgeSp->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
    edgeSp->setPhysicsBody(boundBody);
    this->addChild(edgeSp);
    edgeSp->setTag(0);
```


按照NO_BORDER的属性理论上的效果应该是edgeSp铺满全屏,以最大比率为准,实际运行的效果却是edgeSp没有铺满全屏(附图中红色区域),不居中显示而是偏左显示,右边留出黑色区域,真是百思不得其解啊,是我理解不对还是哪里出错了?
把NO_BORDER换成EXACT_FIT或者SHOW_ALL却又都是预期的效果,我就不明白了,求大神解释一下。代码也一并传上来了
Classes.zip (5 KB)  

 

edgeSp的区域就是图中红框的部分,最想不明白的是edgeSp的左下角居然在屏幕之外,没有人遇到这样的问题吗?

我用的是cocos2d-x 3.0版本,2.0的版本没有就没测试过,不知道是不是3.0的bug,求大神指点

自顶,求解释

我AppDelegate::applicationDidFinishLaunching()加了这句 glview->setDesignResolutionSize(480.0, 320.0,ResolutionPolicy::SHOW_ALL); 连跑都跑不了,不知为什么,我也想知道答案

“zhaoyun.exe”(Win32): 已加载“C:\Administrator\workspace\zhaoyun\proj.win32\Debug.win32\zhaoyun.exe”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcp120d.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120d.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\opengl32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\user32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\lpk.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\usp10.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\glu32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\ddraw.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\dciman32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\setupapi.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\cfgmgr32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleaut32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\devobj.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\dwmapi.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Administrator\workspace\zhaoyun\proj.win32\Debug.win32\glew32.dll”。模块已生成,不包含符号。
“zhaoyun.exe”(Win32): 已加载“C:\Administrator\workspace\zhaoyun\proj.win32\Debug.win32\zlib1.dll”。无法查找或打开 PDB 文件。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\ws2_32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\nsi.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\imm32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msctf.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\uxtheme.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\winmm.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Program Files (x86)\kingsoft\kingsoft antivirus\kwsui.dll”。无法查找或打开 PDB 文件。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\psapi.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\shell32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\shlwapi.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\wtsapi32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\version.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\apphelp.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\SogouPY.ime”。无法查找或打开 PDB 文件。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msimg32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\nvoglv32.dll”。无法查找或打开 PDB 文件。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已卸载“C:\Windows\SysWOW64\gdi32.dll”
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\wintrust.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\crypt32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\msasn1.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntmarta.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\Wldap32.dll”。已加载符号。
线程 0x4dc 已退出,返回值为 0 (0x0)。
“zhaoyun.exe”(Win32): 已加载“C:\Program Files (x86)\SogouInput\Components\SGImeGuard\1.0.0.21\SGImeGuard.dll”。无法查找或打开 PDB 文件。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\powrprof.dll”。已加载符号。
线程 0xca8 已退出,返回值为 0 (0x0)。
“zhaoyun.exe”(Win32): 已卸载“C:\Windows\SysWOW64\powrprof.dll”
“zhaoyun.exe”(Win32): 已加载“C:\Program Files (x86)\kingsoft\kingsoft antivirus\lblocker.dll”。无法查找或打开 PDB 文件。
线程 0x2020 已退出,返回值为 0 (0x0)。
线程 0xcd4 已退出,返回值为 0 (0x0)。
线程 0xccc 已退出,返回值为 0 (0x0)。
“zhaoyun.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。已加载符号。
“zhaoyun.exe”(Win32): 已卸载“C:\Windows\SysWOW64\ole32.dll”
Ready for GLSL
Ready for OpenGL 2.0
cocos2d: WARNING: Image (999 x 54) is bigger than the supported 0 x 0
0x01185F3D 处的第一机会异常(在 zhaoyun.exe 中): 0xC0000094: Integer division by zero。
0x01185F3D 处有未经处理的异常(在 zhaoyun.exe 中): 0xC0000094: Integer division by zero。

单步调试一下看看呢

在return true; 前面加glEnable(GL_CULL_FACE);

edgeSp->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));你的这个要就原点坐标,你可以看一下。应该是你的原点坐标不对auto origin = Director::getInstance()->getVisibleOrigin(); 改为edgeSp->setPosition(Point(visibleSize.width / 2 + origin.x, visibleSize.height / 2+ origin.y));试试

加了还是不行。后面我找到资料说是要把glview->setDesignResolutionSize(480.0, 320.0,ResolutionPolicy::SHOW_ALL) 发到了if语句外面就可以了,结果真的行了

我算是明白了,原点不一定都是(0, 0)的,谢谢解惑
不知道为什么你的回复没有提醒通知,现在才看到