最近项目中使用到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