使用QT + cocos2dx制作工具

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

posted on 2012-11-09 19:10  影语者  阅读(7428)  评论(5编辑  收藏  举报

导航