最近項目中使用到cocos2d-x,因為需要,決定做做工具
開始想法是MFC + OpenGL, 但是感覺完全脫離了cocos2dx, 工具又要用到cocos2dx的一些東西
后來看到了 http://blog.csdn.net/honghaier/article/details/7897077
實現了 MFC + cocos2d-x, 但是MFC很久沒用了,感覺真心不適應,每次寫MFC,感覺都像第一次寫一樣
這次決定嘗試下QT
QT的實現基本和上面MFC的類似, 參考QT的例子,實現一個window
1 void Window::initcocos2d() 2 { 3 cocos2dApp = new AppDelegate; 4 HWND hWnd = (HWND)this->winId(); // 關鍵, QWidget 與 HWND 的轉換 5 CCApplication::sharedApplication().run(hWnd, TEXT("Hello"), 480, 320); 6 }
用一個定時器去刷新
1 void Window::renderCocos2dx(void) 2 { 3 CCApplication::sharedApplication().renderWorld(); 4 } 5 6 Window::Window(QWidget *parent) 7 :QWidget(parent) 8 { 9 QTimer *timer = new QTimer(this); 10 connect(timer, SIGNAL(timeout()), this, SLOT(renderCocos2dx(void))); 11 timer->start(20); 12 13 setWindowTitle(tr("Hello GL")); 14 }
這里要用到qt的SIGNAL and SLOT
頭文件 window.h
1 // window.h 2 class Window : public QWidget 3 { 4 Q_OBJECT // 如果使用自定義 slots, 這個必須定義 5 private slots: 6 void renderCocos2dx(void);
這里還得使用到QT安裝目錄bin下的moc.exe, 在命令行下 moc window.h -o moc_window.cpp
將生成的moc_window.cpp加入工程,否則會有一堆錯誤
關閉時要銷毀, 重載 void closeEvent(QCloseEvent *);
1 void Window::closeEvent(QCloseEvent *event) 2 { 3 cocos2d::CCDirector::sharedDirector()->end(); 4 cocos2d::CCDirector::sharedDirector()->mainLoop(); 5 6 QWidget::closeEvent(event); 7 }
至於鼠標時間, 重載
1 /*virtual*/ void mousePressEvent(QMouseEvent *); 2 /*virtual*/ void mouseReleaseEvent(QMouseEvent *); 3 /*virtual*/ void mouseDoubleClickEvent(QMouseEvent *);
並修改 CEGLView_win32 添加對應處理鼠標事件的函數就OK

