Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks
一:ttf不显示的bug,难搞,一点头绪都没有,只知道别人电脑上能显示,到我这就不行了。其实迅雷的客户端在我的电脑上显示的也不正常。后来发现居然是桌面设置的问题,之前设置的16位,实际上设置32位真彩图就一点问题也没有了。
网上找了下,按照下面的修改,即时设置是16位也能正常了。
一句话描述就是:cocos2dx使用的是32位的帧缓存,创建bitmap的时候使用的dc不是,创建dib的时候也没有设置32位,所以就乱码了。

修改 win32/ccimage.cpp 文件
1.
m_hBmp = CreateBitmap(nWidth, nHeight, 1, 32, NULL);
改成 :
m_hBmp = CreateCompatibleBitmap(m_hDC, nWidth, nHeight);

2.
填加
bi.bmiHeader.biBitCount = 32;搜索
在下面这句话之前
GetDIBits(dc.getDC(), dc.getBitmap(), 0, m_nHeight, m_pData, (LPBITMAPINFO)&bi, DIB_RGB_COLORS);
完美解决





二:无法在xp上运行,现象是先提示什么 无法定位GetTickCount64于Kernel32.dll,然后又无法定位inet_ntop于Kernel32.dll
起初怀疑是控制帧率或者定时器的时候使用了GetTickCount64,后来看了下,用的是多媒体高精度定时器那一套,然后有尝试使用windbg下api断点,也没断到。
在然后老老实实一个dll 一个dll的去看导入函数列表,后来发现是libwebsocket.dll使用了GetTickCount64,从官网重新搞一个回来自己编译。
接下来提示inet_ntop了,思维局限倒是我还以为是在websocket上除了问题,但是实际上最后找到的是在libcocos2dx里边用到了这个函数,所以,还是要有全局意识,不能自己钻到角落里边去了,盯着一个点不放。
if (!WSAAddressToStringA((struct sockaddr*)&sin->sin6_addr, sizeof(sin->sin6_addr), 0, buf, &nLen))
   cocos2d::log("Console: listening on %s : %d", buf, ntohs(sin->sin6_port));
//if( inet_ntop(res->ai_family, &sin->sin6_addr, buf, sizeof(buf)) != nullptr )
// cocos2d::log("Console: listening on %s : %d", buf, ntohs(sin->sin6_port));



posted on 2014-12-08 19:26 Enic 阅读(365) 评论(0)  编辑 收藏 引用 所属分类: cocos2d-x

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理