cocos2dx 3.3 + QT5.3制作游戏编辑器
欢迎转载,但请注明本blog地址,谢谢_(:зゝ∠)_ http://www.cnblogs.com/marisa/p/4141862.html
主要参考: http://blog.csdn.net/greatchina01/article/details/39579185 http://blog.csdn.net/yurenjimi/article/details/7427330 准备 1. qt-opensource-windows-x86-msvc2013_opengl-5.3.2.exe 2. qt-vs-addin-1.2.3-opensource.exe 3. vs2013 配置环境变量 1. 添加QTDIR为QT的安装路径,如:D:QtQt5.3.25.3msvc2013_opengl 2. 添加PATH,%QTDIR%bin 建立工程 (事先用cocos2dx创建一个HelloWorld工程) 1. 打开VS2013,新建QtApplication工程(需要勾选openGL模块)。 2. 拷贝Classes,cocos2d,Resources三个目录到QT工程的根目录下(.vcxproj文件所在目录) 3. 右键点击解决方案添加工程libbox2d,libcocos2d,libSpine。 配置工程属性 基本就是照抄HelloWorld的工程属性: 1. 添加属性宏 视图->其他窗口->属性管理器->点击工程添加新属性表(名字随意) 点击新建的属性表,在用户宏中添加宏: 名称: EngineRoot 值: $(ProjectDir)cocos2d 2. 通用属性/引用 添加新引用,勾选libbox2d,libSpine三个工程。 3. 常规 输出目录:$(SolutionDir)$(Configuration).win32 中间目录:$(Configuration).win32 4. 调试 工作目录:$(ProjectDir)Resources 5. C/C++/常规 附加包含目录: 添加 $(EngineRoot)cocosaudioinclude 6. C/C++/预处理器 _DEBUG 7. 链接器/常规 附加库目录: $(SolutionDir)$(Configuration).win32 8. 链接器/输入 附加依赖项: opengl32.lib 9. 生成事件 预链接事件 if not exist "$(OutDir)" mkdir "$(OutDir)" 修改代码 测试:在MainWindow的构造函数中启动cocos2d,看是否能编译运行通过 #include "qttest.h" #include Classes/AppDelegate.h" QTTest::QTTest(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); AppDelegate app; cocos2d::Application::getInstance()->run(); } QTTest::~QTTest() { } 上面的代码运行成功会先弹出cocos2d的HelloWorld界面,关掉后再弹出QT窗口。因为run函数里面是死循环,只有run退出了才会完成QTTest的构造。 这里只是检查下工程配置是否正确,如果可以正常编译和运行再继续_(:зゝ∠)_ 制作编辑器 接下来才是正题,因为cocos2d-x 3.x版本window的创建用的是glfwCreateWindow(),拿到的窗口句柄是GLFWwindow*类型的_mainWindow。 老实说我不知道怎么拿这个GLFWwindow去创建一个QT窗口_(:зゝ∠)_ 那怎么办?造轮子呗,参考了一个cocos2d-x 2.14版本的QtPort工程,于是打算这样搞: 1. 不用glfwCreateWindow创建窗口,用QGLwidget搞。那么需要继承GLViewImpl,重写create方法,另外还需重写输入接口。 2. 重写消息循环,用QTimer驱动。那么需要继承Application,同时还需多重继承QApplication,重写run方法。 轮子我已经造了,代码放在: https://github.com/gameboy12615/CocosQtPort 或者: https://git.oschina.net/takamachimarisa/CocosQtPort 目前基本功能都有了,支持窗口自动缩放,不过key输入事件还没写。另外由于DesignResolutionSize不能改,导致窗口宽高比只能是固定的,因此窗口拉长后会空出一块。 当然做2D编辑器的话,在CCQGLView::Create()中把宽高比设大点就可以了。但是要做3D编辑器就有点不方面,具体可以自己体会(有好方法也求路过的大牛不吝赐教)_(:зゝ∠)_ 嘛,先看效果: 大概就是这个样子,下面说下轮子的用法: 1. 参考前面1~9步用VS2013创建一个QT Application项目,我这里命名为CCGEditor,因此主窗口类是CCGEditor.h和CCGEditor.cpp这两个文件。 2. 用QT设计师创建一个QDockWidget(随便什么QWidget都可以)用来放cocos2d的窗口。我这里是SceneWidget,代码中可以直接用ui.SceneWidget来获取到。 3. 拷贝CocosQtPort到Classes目录下。 4. 修改AppDelegate,使其继承自cocos2d::CCQApplication,并使用CCQGLView创建glview,代码如下: AppDelegate.h
AppDelegate.cpp
13
14
15
16
|
#include "AppDelegate.h"
#include "HelloWorldScene.h"
#include "CocosQtPort/CCQGLView.h"
......
bool
AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto
director = Director::getInstance();
glview = CCQGLView::getInstance();
glview->setBgColor(Color4B(50,50,255));
director->setOpenGLView(glview);
_mainWindow.setGLView(glview->getGLWidget());
_mainWindow.show();
......
}
|
5. 修改CCGEditor,代码如下:
CCGEditor.h
#define CCGEDITOR_H
#include <QtWidgets/QMainWindow>
namespace
Ui {
}
CCGEditor :
QMainWindow
Q_OBJECT
:
~CCGEditor();
void
setGLView(QWidget *glWidget);
:
Ui::CCGEditorClass ui;
QWidget *_glWidget;
CCGEditor.cpp
#include "Classes/AppDelegate.h"
#include <QDockWidget>
CCGEditor::CCGEditor(QWidget *parent)
_appDelegate(NULL),
{
this
);
}
CCGEditor::~CCGEditor()
{
qApp->quit();
{
(_glWidget)
{
setCentralWidget(ui.SceneWidget);
6. 修改main.cpp
14
#include "cocos2d.h"
main(
*argv[])
AppDelegate app(argc,argv);
cocos2d::CCQApplication::getInstance()->run();
编译运行,打完收工_(:зゝ∠)_
from:http://www.cnblogs.com/marisa/p/4141862.html
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!