位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享cocos2dx 3.3 + QT5.3制作游戏编辑器,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

欢迎转载,但请注明本blog地址,谢谢_(:зゝ∠)_

准备

1. qt-opensource-windows-x-msvc_opengl-5.3.2.exe

2. qt-vs-addin-1.2.3-opensource.exe

3. vs

配置环境变量

1. 添加QTDIR为QT的安装路径,如:D:QtQt5.3..3msvc_opengl

2. 添加PATH,%QTDIR%bin

建立工程

(事先用cocos2dx创建一个HelloWorld工程)

1. 打开VS,新建QtApplication工程(需要勾选openGL模块)。

2. 拷贝Classes, cocos2d, Resources三个目录到QT工程的根目录下(.vcxproj文件所在目录)

3. 右键点击解决方案添加工程libbox2d, libcocos2d, libSpine。

配置工程属性

基本就是照抄HelloWorld的工程属性:

1. 添加属性宏

视图->其他窗口->属性管理器->点击工程添加新属性表(名字随意)

点击新建的属性表,在用户宏中添加宏:

名称: EngineRoot

&#;: $(ProjectDir)cocos2d

2. 通用属性/引用

添加新引用,勾选libbox2d, libcocos2d, libSpine三个工程。

3. 常规

输出目录: $(SolutionDir)$(Configuration).win

中间目录: $(Configuration).win

4. 调试

工作目录: $(ProjectDir)Resources

5. C/C&#;&#;/常规

附加包含目录:

添加

$(EngineRoot)cocosaudioinclude$(EngineRoot)external$(EngineRoot)externalchipmunkincludechipmunk$(EngineRoot)extensions$(ProjectDir)Classes$(ProjectDir)$(EngineRoot)cocoseditor-support$(EngineRoot)cocos$(EngineRoot)cocosplatform$(EngineRoot)cocosplatformdesktop$(EngineRoot)externalglfw3includewin$(EngineRoot)externalwin-specificglesincludeOGLES

6. C/C&#;&#;/预处理器

添加

_DEBUG_WINDOWS_USE_MATH_DEFINESGL_GLEXT_PROTOTYPESCC_ENABLE_CHIPMUNK_INTEGRATION=1COCOS2D_DEBUG=1_CRT_SECURE_NO_WARNINGS_SCL_SECURE_NO_WARNINGS_VARIADIC_MAX=_USING_V_SDK__UNICODE

7. 链接器/常规

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

附加库目录:

添加

$(SolutionDir)$(Configuration).win

8. 链接器/输入

附加依赖项:

添加

opengl.libglew.liblibzlib.liblibpng.liblibjpeg.liblibtiff.liblibwebp.liblibiconv.libglfw3.libfreetype.libwinmm.libws2_.liblibchipmunk.liblibbox2d.liblibSpine.libkernel.libuser.libgdi.libwinspool.libcomdlg.libadvapi.libshell.libole.liboleaut.libuuid.libodbc.libodbccp.lib

9. 生成事件

预链接事件

if not exist "$(OutDir)" mkdir "$(OutDir)"xcopy /Y /Q "$(EngineRoot)externalwebsocketsprebuiltwin*.*" "$(OutDir)"

修改代码

测试:在MainWindow的构造函数中启动cocos2d,看是否能编译运行通过

上面的代码运行成功会先弹出cocos2d的HelloWorld界面,关掉后再弹出QT窗口。因为run函数里面是死循环,只有run退出了才会完成QTTest的构造。

这里只是检查下工程配置是否正确,如果可以正常编译和运行再继续_(:зゝ∠)_

制作编辑器

接下来才是正题,因为cocos2d-x 3.x版本window的创建用的是glfwCreateWindow(), 拿到的窗口句柄是GLFWwindow*类型的_mainWindow。

老实说我不知道怎么拿这个GLFWwindow去创建一个QT窗口_(:зゝ∠)_

那怎么办?造轮子呗,参考了一个cocos2d-x 2.版本的QtPort工程,于是打算这样搞:

1. 不用glfwCreateWindow创建窗口,用QGLwidget搞。那么需要继承GLViewImpl,重写create方法,另外还需重写输入接口。

2. 重写消息循环,用QTimer驱动。那么需要继承Application,同时还需多重继承QApplication,重写run方法。

轮子我已经造了,代码放在:

目前基本功能都有了,支持窗口自动缩放,不过key输入事件还没写。另外由于DesignResolutionSize不能改,导致窗口宽高比只能是固定的,因此窗口拉长后会空出一块。

当然做2D编辑器的话,在CCQGLView::Create()中把宽高比设大点就可以了。但是要做3D编辑器就有点不方面,具体可以自己体会(有好方法也求路过的大牛不吝赐教)_(:зゝ∠)_

嘛,先看效果:

大概就是这个样子,下面说下轮子的用法:

1. 参考前面1~9步用VS创建一个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(, , , )); 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();}

cocos2d-x windows开发环境配置 声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级后的cocos2d-x有了一些变化,目前的博文还没有关于Co

Cocos2dx开发之锚点 Cocos2dx开发之锚点实例讲解

cocos2d出错 -::.:A/art():art/runtime/check_jni.cc:]JNIDETECTEDERRORINAPPLICATION:thereturntypeofCallStaticIntMethodVdoesnotmatchvoidcom.zhongshu.gamebase.GameBase.PayForFee(int,int,java.lang.S

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

本文链接地址:https://www.jiuchutong.com/biancheng/369159.html 转载请保留说明!

上一篇:[置顶] 【零起步开发Cocos2dx-3.x-王牌飞行员(三)】素材文件的制作(置顶朋友圈怎么设置)

下一篇:cocos2d-x windows开发环境配置

  • 小规模纳税人起征点和免征额
  • 借款合同印花税减免优惠政策2023
  • 收据盖发票专用章后果
  • 其他应收款财务报表取数
  • 个人独资企业生产经营所得汇算清缴时间
  • 股东个人将钱打入公司对公账户,能否算作投资款
  • 在账务处理过程中,最关键的环节是
  • 盈余公积补亏什么科目
  • 转让土地使用权一般计税方法
  • 增值税税收返还政策
  • 坏账准备一般余额在哪方
  • 新办公司注册资金直接支付开办费吗
  • 跨区域施工增值税怎么交
  • 顾问费的个税怎么扣
  • 公司注销对外投资股权有效吗
  • 专票已经认证能作废吗
  • 增值税小规模纳税人减免增值税政策
  • 抵扣联复印件可以做账吗
  • 软件开发公司研发主管绩效考核
  • 财政返还额度会计分录
  • 暂估人工成本分录怎么写
  • 在windows7中桌面指的是全部窗口
  • 苹果14pro max价格
  • windows10右键刷新有点卡
  • PHP:Memcached::getServerList()的用法_Memcached类
  • 纳税调整项目有一个其他调增金额是怎么组成的
  • 企业所得税扣除标准表
  • 简述金融会计的主要职能
  • 黄金税收多少
  • 商品流通企业一般采用
  • 电子税务局已申报信息查询
  • 如何用java写接口
  • 前端bs是什么
  • websocket tcpsocket
  • thinkphp6验证
  • php手机验证码验证
  • mysql中regexp_substr函数的使用
  • ps抠图之后怎么拿出来
  • 税款已缴纳可以作废申报吗
  • 劳务派遣服务是收派服务吗
  • 织梦怎么样
  • 单位代扣公积金是什么意思
  • 公帐的钱可以转到其他人帐户吗
  • 劳务外包收入如何纳税
  • SQL Server实现split函数分割字符串功能及用法示例
  • 计提工资和发放工资可以在一张凭证上吗
  • 定期定额户用财务制度备案吗
  • 季度亏损需要计提企业所得税吗
  • 金融企业里面的债务
  • 投资的信托基金有哪些
  • 支付上月采购货款
  • 其他债权投资有哪些科目
  • 工程款可以转入存折里吗怎么转
  • 出口免抵退和免退有什么区别
  • 未分配利润转增股本要交税吗怎么交
  • 收到现金货款存入银行会计分录
  • mysql如何修改默认值
  • fedora修改ip地址
  • win7还能用几年
  • xp系统鼠标设置在哪
  • CentOS上查看系统信息以及配置防火墙的方法
  • VMware虚拟机安装miui14
  • wpr是什么软件
  • ubuntu添加环境变量后黑屏
  • win8屏幕键盘快捷键
  • centos7.0安装网卡驱动
  • win8设备管理器没有端口
  • win10非管理员账户开启管理员账户
  • linux查找文件语句
  • 导入项目出现这个问题
  • 2014 ChinaJoy落下帷幕 十大年度热门事件盘点
  • js调用方法什么时候要加括号
  • eclipse从本地导入项目
  • 安卓显示时间代码
  • jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
  • python怎么用命令行
  • js如何实现复制
  • 非经营性房屋具体指哪些?
  • 水产品 免税
  • 税率的分类有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设