您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 3.3 + QT5.3制作游戏编辑器

2015-05-23 23:32 411 查看

http://www.cnblogs.com/marisa/p/4141862.html

欢迎转载,但请注明本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:\Qt\Qt5.3.2\5.3\msvc2013_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, libcocos2d, libSpine三个工程。
3. 常规
输出目录: $(SolutionDir)$(Configuration).win32\
中间目录: $(Configuration).win32\
4. 调试
工作目录: $(ProjectDir)Resources
5. C/C++/常规
附加包含目录:
添加
$(EngineRoot)cocos\audio\include

$(EngineRoot)external

$(EngineRoot)external\chipmunk\include\chipmunk

$(EngineRoot)extensions

$(ProjectDir)Classes

$(ProjectDir)

$(EngineRoot)cocos\editor-support

$(EngineRoot)cocos

$(EngineRoot)cocos\platform

$(EngineRoot)cocos\platform\desktop

$(EngineRoot)external\glfw3\include\win32

$(EngineRoot)external\win32-specific\gles\include\OGLES
6. C/C++/预处理器
添加
_DEBUG

_WINDOWS

_USE_MATH_DEFINES

GL_GLEXT_PROTOTYPES

CC_ENABLE_CHIPMUNK_INTEGRATION=1

COCOS2D_DEBUG=1

_CRT_SECURE_NO_WARNINGS

_SCL_SECURE_NO_WARNINGS

_VARIADIC_MAX=10

_USING_V110_SDK71_

_UNICODE
7. 链接器/常规
附加库目录:
添加
$(SolutionDir)$(Configuration).win32\
8. 链接器/输入
附加依赖项:
添加
opengl32.lib

glew32.lib

libzlib.lib

libpng.lib

libjpeg.lib

libtiff.lib

libwebp.lib

libiconv.lib

glfw3.lib

freetype250.lib

winmm.lib

ws2_32.lib

libchipmunk.lib

libbox2d.lib

libSpine.lib

kernel32.lib

user32.lib

gdi32.lib

winspool.lib

comdlg32.lib

advapi32.lib

shell32.lib

ole32.lib

oleaut32.lib

uuid.lib

odbc32.lib

odbccp32.lib
9. 生成事件
预链接事件
if not exist "$(OutDir)" mkdir "$(OutDir)"

xcopy /Y /Q "$(EngineRoot)external\websockets\prebuilt\win32\*.*" "$(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

5. 修改CCGEditor,代码如下:
CCGEditor.h

CCGEditor.cpp

6. 修改main.cpp

编译运行,打完收工_(:зゝ∠)_
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: