【已解决】setDesignResolutionSize出错 Integer division by zero

我在代码中开启pEGLView->setDesignResolutionSize的时候,和下面这个帖子的楼主遇到相同问题
老是报
(libcocos2d.dll) 处有未经处理的异常: 0xC0000094: Integer division by zero

cocoachina.com/bbs/read.php?tid=174704&page=1

debug了一下,追溯了一下问题出的地方

D:\cocos2d-x-2.2.2\cocos2dx\label_nodes\CCLabelAtlas.cpp

    float row = (float) (a % m_uItemsPerRow);  m_uItemsPerRow为0,导致出错
    float col = (float) (a / m_uItemsPerRow);

m_uItemsPerRow为0是因为 D:\cocos2d-x-2.2.2\cocos2dx\base_nodes\CCAtlasNode.cpp 中

void CCAtlasNode::calculateMaxItems(){
CCSize s = m_pTextureAtlas->getTexture()->getContentSize();
if (m_bIgnoreContentScaleFactor) {
s = m_pTextureAtlas->getTexture()->getContentSizeInPixels(); 这里的纹理size为0
}
m_uItemsPerColumn = (int)(s.height / m_uItemHeight); 导致m_uItemsPerColumn 也为0
m_uItemsPerRow = (int)(s.width / m_uItemWidth);}

定为到D:\cocos2d-x-2.2.2\cocos2dx\CCDirector.cpp ,为了在画面上显示帧数之类的信息的处理

void CCDirector::createStatsLabel(){ //…略 unsigned char data = NULL;
unsigned int data_len = 0;
getFPSImageData(&data, &data_len); 这个data是D:\cocos2d-x-2.2.2\cocos2dx\ccFPSImages.c里的
CCImage
image = new CCImage();
bool isOK = image->initWithImageData(data, data_len); initWithImageData过后,image 的m_pData指向的数据是空的,见我的截图
if (!isOK) {
CCLOGERROR("%s", “Fails: init fps_images”);
return;
}
texture = textureCache->addUIImage(image, “cc_fps_images”); 然后在这返回的texture 的就是个size为0的空纹理,导致程序崩掉,我的截图
CC_SAFE_RELEASE(image);

所以,最后在D:\cocos2d-x-2.2.2\cocos2dx\platform\CCImageCommon_cpp.h 的

bool CCImage::_initWithPngData(void * pData, int nDatalen) 中
{
//…略

   m_pData = new unsigned char;
    CC_BREAK_IF(!m_pData);

    for (unsigned short i = 0; i < m_nHeight; ++i)
    {
        row_pointers = m_pData + i*rowbytes;
    }

png_read_image(png_ptr, row_pointers); 根据png.h头文件,row_pointers是png_bytepp image,但是m_pData 只是new了下,都是空的,然后循环设置给row_pointers也是空的,
而引数里的pData才是放的image数据啊

    png_read_end(png_ptr, NULL);

}

问题是出在_initWithPngData的这段代码里吗。
也不知道分析的对不对,有没有人用setDesignResolutionSize没问题的?

在隔壁板块找到答案了

director->setOpenGLView(eglView);

eglView->setDesignResolutionSize(540, 960, ResolutionPolicy::NO_BORDER);

设置开发尺寸的时候.一定要放在setGLVIEW后面.
否则就会出错