我在代码中开启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没问题的?