或者是不需要修改 libcocos2dx, 通過setWindow(GLWidget*) 的方式給視窗. 如下:
AppDelegate.cpp:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_QT)static CCEGLView* pMainWnd = NULL;static void mouseMove(QMouseEvent *event){ pMainWnd->mouseMove(event);}static void mousePress(QMouseEvent *event){ pMainWnd->mousePress(event);}static void mouseRelease(QMouseEvent *event){ pMainWnd->mouseRelease(event);}#endif
bool AppDelegate::initInstance() {
// ....
pMainWnd = new CCEGLView();// CC_BREAK_IF(! pMainWnd|| ! pMainWnd->Create(480, 320)); int iWidth = 480; int iHeight = 320; QWidget *w = new QWidget(); w->setAttribute(Qt::WA_DeleteOnClose); QHBoxLayout *layout = new QHBoxLayout(); GLWidget *glWidget = new GLWidget(iWidth,iHeight, CCDirector::sharedDirector()); pMainWnd->SetWindow(glWidget); glWidget->setMouseMoveFunc(&mouseMove); glWidget->setMousePressFunc(&mousePress); glWidget->setMouseReleaseFunc(&mouseRelease); glWidget->setWindowFlags(glWidget->windowFlags()& ~Qt::WindowMaximizeButtonHint); glWidget->setFixedSize(iWidth, iHeight); layout->addWidget(glWidget); layout->addWidget(new QPushButton("Cocos2dx")); w->setLayout(layout); w->show();
// ....
}
Test:
CCLabelTTF *label = CCLabelTTF::labelWithString("xx", "Arial", 32); label->setPosition( ccp(200,200) ); scene->addChild(label, 2);空白一片.
這是由於多線程引起的。
修正方法: http://blog.csdn.net/yurenjimi/article/details/9092147 (2013-06-14)