一: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));