一:ttf不顯示的bug,難搞,一點(diǎn)頭緒都沒有,只知道別人電腦上能顯示,到我這就不行了。其實(shí)迅雷的客戶端在我的電腦上顯示的也不正常。后來發(fā)現(xiàn)居然是桌面設(shè)置的問題,之前設(shè)置的16位,實(shí)際上設(shè)置32位真彩圖就一點(diǎn)問題也沒有了。
網(wǎng)上找了下,按照下面的修改,即時(shí)設(shè)置是16位也能正常了。
一句話描述就是:cocos2dx使用的是32位的幀緩存,創(chuàng)建bitmap的時(shí)候使用的dc不是,創(chuàng)建dib的時(shí)候也沒有設(shè)置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上運(yùn)行,現(xiàn)象是先提示什么 無法定位GetTickCount64于Kernel32.dll,然后又無法定位inet_ntop于Kernel32.dll起初懷疑是控制幀率或者定時(shí)器的時(shí)候使用了GetTickCount64,后來看了下,用的是多媒體高精度定時(shí)器那一套,然后有嘗試使用windbg下api斷點(diǎn),也沒斷到。
在然后老老實(shí)實(shí)一個(gè)dll 一個(gè)dll的去看導(dǎo)入函數(shù)列表,后來發(fā)現(xiàn)是libwebsocket.dll使用了GetTickCount64,從官網(wǎng)重新搞一個(gè)回來自己編譯。
接下來提示inet_ntop了,思維局限倒是我還以為是在websocket上除了問題,但是實(shí)際上最后找到的是在libcocos2dx里邊用到了這個(gè)函數(shù),所以,還是要有全局意識(shí),不能自己鉆到角落里邊去了,盯著一個(gè)點(diǎn)不放。
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));