欢迎转载,但请注明本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

#include "cocos2d.h"
#include "CocosQtPort/CCQApplication.h"
#include "../ccgeditor.h" class AppDelegate : private cocos2d::CCQApplication
{
public:
AppDelegate(int argc, char *argv[]) : cocos2d::CCQApplication(argc, argv) {};
virtual ~AppDelegate();
......
protected:
CCGEditor _mainWindow;
};

AppDelegate.cpp

#include "AppDelegate.h"
#include "HelloWorldScene.h"
#include "CocosQtPort/CCQGLView.h" ......
bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = CCQGLView::getInstance();
glview->setBgColor(Color4B(50, 50, 50, 255)); director->setOpenGLView(glview);
_mainWindow.setGLView(glview->getGLWidget());
_mainWindow.show();
......
}

5. 修改CCGEditor,代码如下:

CCGEditor.h

#ifndef CCGEDITOR_H
#define CCGEDITOR_H #include <QtWidgets/QMainWindow>
#include "ui_ccgeditor.h" class AppDelegate;
namespace Ui {
class CCGEditor;
} class CCGEditor : public QMainWindow
{
Q_OBJECT public:
CCGEditor(QWidget *parent = 0);
~CCGEditor(); void setGLView(QWidget *glWidget); protected:
void closeEvent(QCloseEvent *); private:
Ui::CCGEditorClass ui;
AppDelegate *_appDelegate;
QWidget *_glWidget;
}; #endif // CCGEDITOR_H

CCGEditor.cpp

#include "ccgeditor.h"
#include "Classes/AppDelegate.h"
#include "Classes/CocosQtPort/CCQGLView.h" #include <QTimer>
#include <QDockWidget> CCGEditor::CCGEditor(QWidget *parent)
: QMainWindow(parent),
_appDelegate(NULL),
_glWidget(NULL)
{
ui.setupUi(this);
} CCGEditor::~CCGEditor()
{ } void CCGEditor::closeEvent(QCloseEvent *)
{
cocos2d::Director::getInstance()->end();
qApp->quit();
} void CCGEditor::setGLView(QWidget *glWidget)
{
_glWidget = glWidget; if (_glWidget)
{
ui.SceneWidget->setWidget(_glWidget);
setCentralWidget(ui.SceneWidget);
}
}

6. 修改main.cpp

#include "ccgeditor.h"
#include <QtWidgets/QApplication> #include "Classes/AppDelegate.h"
#include "Classes/CocosQtPort/CCQGLView.h"
#include "cocos2d.h" USING_NS_CC; int main(int argc, char *argv[])
{
AppDelegate app(argc, argv);
return cocos2d::CCQApplication::getInstance()->run();
}

编译运行,打完收工_(:зゝ∠)_

cocos2dx 3.3 + QT5.3制作游戏编辑器的更多相关文章

  1. Unity中制作游戏的快照游戏支持玩家拍快照

    Unity中制作游戏的快照游戏支持玩家拍快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能.这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游 ...

  2. Unity制作游戏中的场景

    Unity制作游戏中的场景 1.2.3  场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...

  3. 使用Unity制作游戏关卡的教程(一)

    转自: http://gamerboom.com/archives/74131 作者:Matthias Zarzecki 我正在制作<Looking For Group – The Fork O ...

  4. 123457123456#0#-----com.threeapp.MakerHanBao01----儿童汉堡制作游戏

    ----com.threeapp.MakerHanBao01----儿童汉堡制作游戏

  5. 笔记:利用 Cocos2dx 3.2 与 Box2D制作一个跑酷游戏(上)

    最近写lua写得没有力气了,所以想让脑袋放松一下,刚好看到有人在用swift做游戏: Swift游戏实战-跑酷熊猫 于是脑子一短路,就想到了利用这些素材来做一个游戏. 本来不想记笔记的,但是由于选择物 ...

  6. 用Python制作游戏外挂(上)

    源地址:http://eyehere.net/2012/python-game-bot-autopy-1/ 悲剧成我这样的人,我知道肯定不止我一个,所以我一点都不悲伤:-( 所以我打开了4399小游戏 ...

  7. 关于Cocos Studio制作游戏资源

    没想到,Cocos Studio居然是做游戏资源的,而且可以做骨骼动画,虽然我还不会做,只能自己一个人慢慢研究了.学长以前说,Coocs Studio只是用来打包项目成Apk的,没有什么卵用,刚开始我 ...

  8. 一步步用python制作游戏外挂【转】

    转自:http://www.cnblogs.com/xsmhero/archive/2013/01/03/2842973.html 玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过 ...

  9. [译]Godot系列教程五 - 制作Godot编辑器插件

    制作插件 下文仅针对2.1版本. 关于插件 插件是为编辑器扩展出更多有用工具的重要方式.它可以完全用GDScript和标准场景开发,甚至都不需重新加载编辑器就可生效.不像模块,你无需创建C++代码.也 ...

随机推荐

  1. 【python进阶】Garbage collection垃圾回收2

    前言 在上一篇文章[python进阶]Garbage collection垃圾回收1,我们讲述了Garbage collection(GC垃圾回收),画说Ruby与Python垃圾回收,Python中 ...

  2. python学习之路web框架

    WEB框架的本质 python的WEB框架分为两大类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理 ...

  3. 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)

    1.线性规划模型: 2.使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://doc ...

  4. HTML DOM 改变 HTML 内容

    HTML DOM 允许 JavaScript 改变 HTML 元素的内容. 改变 HTML 输出流 JavaScript 能够创建动态的 HTML 内容: 今天的日期是: Thu Feb 25 201 ...

  5. Hadoop就业面试题

    ----------------------------------------------------------------------------- [申明:资料来源于互联网] 本文链接:htt ...

  6. Tomcat如何实现WebSocket

    WebSocket协议属于HTML5标准,越来越多浏览器已经原生支持WebSocket,它能让客户端和服务端实现双向通信.在客户端和服务器端建立一条WebSocket连接后,服务器端消息可直接发送到客 ...

  7. 支付平台PCI认证整改

    五大国际卡组织推出的PCI支付认证.支付平台改造方案.

  8. Hadoop的RPC通信原理

    RPC调用: RPC(remote procedure call)远程过程调用: 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称为客户端(client): server端 ...

  9. 【伯乐在线】100个高质量Java开发者博客

    本文由 ImportNew - 夏千林 翻译自 programcreek.欢迎加入翻译小组.转载请见文末要求. ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博 ...

  10. 游戏引擎cocos2d-android使用大全

    做手机游戏需要三个核心的类,即:SurfaceView,SurfaceHolder,Thread.帧数要在30帧左右是最好的. cocos2d游戏引擎 封装好的框架,可直接使用 cocos2d-and ...