Cocos2dx杂记:PhysicsEditor 对应cocos2dx 3.x的接口封装

【cocos2dx3.5接入chipmunk物理引擎】 cocos2dx、chipmunk物理引擎的使用 阅读详情

PhysicsEditor是一款box2d形状生成器,只需点点鼠标即可生成plist图形文件,还有很有特色的魔术棒工具,可自动完成标记定点和分隔polygon的过程。可以直接在cocos2dx中使用。
如图所示:可以对边缘进行不规则图形的选取

界面效果图

官方提供了Cocos2dx的第三方库,但是采用的是2.x的接口,3.x下面依然是可以使用的,不过在这添加了采用3.x接口封装的方法

void GB2ShapeCache::addShapesWithV3(const std::string &plist) {
    //const char *fullName = CCFileUtils::sharedFileUtils()->fullPathForFilename(plist.c_str()).c_str();

    auto dict = FileUtils::getInstance()->getValueMapFromFile(plist);
    //基础属性
    auto metadataDict = dict["metadata"].asValueMap();
    auto format = metadataDict["format"].asInt();
    ptmRatio = metadataDict["ptm_ratio"].asFloat();

    //body属性]
    b2Vec2 vertices[b2_maxPolygonVertices];
    std::string bodyName;
    auto bodyDict = dict["bodies"].asValueMap();

    for (auto obj : bodyDict) {
        bodyName = obj.first;
        auto bodyData = bodyDict[bodyName].asValueMap();
        BodyDef *bodyDef = new BodyDef();
        bodyDef->anchorPoint = PointFromString(bodyData["anchorpoint"].asString());
        auto fixtureList = bodyData["fixtures"].asValueVector();
        FixtureDef **nextFixtureDef = &(bodyDef->fixtures);

        for (auto fixture : fixtureList) {
            b2FixtureDef basicData;
            ValueMap vecmap = fixture.asValueMap();

            basicData.density = vecmap["density"].asFloat();
            basicData.friction = vecmap["friction"].asFloat();
            basicData.restitution = vecmap["restitution"].asFloat();
            basicData.filter.categoryBits = vecmap["filter_categoryBits"].asInt();
            basicData.filter.groupIndex = vecmap["filter_groupIndex"].asInt();
            basicData.filter.maskBits = vecmap["filter_maskBits"].asFloat();
            basicData.isSensor = vecmap["isSensor"].asBool(); 

            std::string cb = vecmap["userdataCbValue"].asString();
            int callbackData = 0;
            if (cb.compare("") == 0) {
                callbackData = std::atoi(cb.c_str());
            }

            std::string fixtureType = vecmap["fixture_type"].asString();
            if (fixtureType == "POLYGON") {
                auto vec2Aarry = vecmap["polygons"].asValueVector();
                for (auto vec : vec2Aarry) {
                    FixtureDef *fix = new FixtureDef();
                    fix->fixture = basicData; // copy basic data
                    fix->callbackData = callbackData;

                    b2PolygonShape *polyshape = new b2PolygonShape();
                    int vindex = 0;

                    auto posArray = vec.asValueVector();

                    for (auto pos : posArray) {
                        Vec2 offset = PointFromString(pos.asString());
                        vertices[vindex].x = (offset.x / ptmRatio);
                        vertices[vindex].y = (offset.y / ptmRatio);
                        vindex++;
                    }

                    polyshape->Set(vertices, vindex);
                    fix->fixture.shape = polyshape;

                    // create a list
                    *nextFixtureDef = fix;
                    nextFixtureDef = &(fix->next);
                }
            }
            else if (fixtureType == "CIRCLE") {
                FixtureDef *fix = new FixtureDef();
                fix->fixture = basicData; // copy basic data
                fix->callbackData = callbackData;

                auto circleData = vecmap["circle"].asValueMap();

                b2CircleShape *circleShape = new b2CircleShape();

                circleShape->m_radius = circleData["radius"].asFloat() / ptmRatio;
                Vec2 p = PointFromString(circleData["position"].asString());
                circleShape->m_p = b2Vec2(p.x / ptmRatio, p.y / ptmRatio);
                fix->fixture.shape = circleShape;

                // create a list
                *nextFixtureDef = fix;
                nextFixtureDef = &(fix->next);
            }
            else {
                CCAssert(0, "Unknown fixtureType");
            }

        }
        // add the body element to the hash
        shapeObjects[bodyName] = bodyDef;
    }

1、使用方法

    // Load shapes,传入PE工具生产的plist文件,一个具有不规则形状的物理碰撞就实现了
    GB2ShapeCache::sharedGB2ShapeCache()->addShapesWithV3("sharp.plist");

2、下载地址

PhysicsEditor第三方库

GB2ShapeCache-x 对应cocos2dx 3.x版本创建接口 官方提供了Cocos2dx的第三方库,但是采用的是2.x的接口,3.x下面依然是可以使用的,不过在这添加了采用3.x接口封装的方法 立即下载

相关推荐

GB2ShapeCache-x.cpp

cocos2dx 2.x PhysicsEditor 使用GB2ShapeCache-x.cpp

关于cocos2d-X 3.x版本使用引擎自带的物理引擎Physics

今天本来打算使用BOX2D物理引擎的, 想到前段时间听说cocos2d-X在3.0版本中封装了一个自己的物理引擎Physics, 听名字就很霸气额, 用起来确实是比BOX2D简单很多( 毕竟是基于BOX2D封装的嘛), 好了, 现在我们来看看如何使用Physics这个物理引擎, 第一步: 创建项目............略 第二部: 修改场景的创建方式 将Scene::cre

hushuai1992 5254

麒麟系统下PaddleOCR的离线部署实战:从环境搭建到模型优化

本文详细介绍了在国产麒麟操作系统上离线部署百度PaddleOCR的完整实战流程。从系统环境准备、Conda虚拟环境搭建,到PaddlePaddle框架和PaddleOCR的离线安装,再到预训练模型的本地部署与优化技巧,提供了全面的文字识别解决方案。重点解决了离线环境下依赖包管理、模型量化加速等核心问题,并附带了批量处理与内存监控的进阶代码,适用于对数据安全有严格要求的政务、金融等场景。

docker7nomad的博客 963

【Cocos2d-x】PhysicsEditor的使用

下载与安装PhysicsEditor 物理编辑器介绍 1.VertexHelper 免费、开源的物理编辑器,只能在Mac平台下使用。 2.PhysicsEditor 收费,支持windows与mac。可免费使用,有功能限制。 这里使用的是PhysicsEditor。 PhysicsEditor下载地址: 下载地址一:https://www.codeandweb.com/physicseditor 下载地址二:http://pan.baidu.com/s/1mgp8eHa 在PhysicsEdito

3192

记录:MCGS和正弦变频器通讯

触摸屏实现对变频器:启动、停止、频率设定、频率读取、电压读取、电流读取。通讯方式Modbus RTU。

m0_61837027的博客 1024

RK3588嵌入式开发:从零构建Rockit多媒体处理引擎的实战指南

本文详细介绍了如何在RK3588嵌入式平台上从零构建Rockit多媒体处理引擎的实战指南。涵盖开发环境搭建、工具链配置、源码编译流程、硬件加速优化及典型问题解决方案,帮助开发者高效利用RK3588的NPU和VPU加速特性,实现高性能多媒体处理应用。

mango的博客 185

Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形

Cocos2d-x 3.0的新物理系统我就不必多说了,接触一段时间,感觉还是不错的。对于那些基本概念,网上的教程已经泛滥了,就不多说了,不过对于创建多边形物体的教程,还真不多,很多都是创建圆形和矩形,这两个很简单,传入图片的大小数据基本就可以搞定了。多边形的麻烦之处在于每个点的位置,Mac下有VertexHelper可以很轻松获取到多边形的每个点,然后创建出来,但Windows下,呃,确实我没找到

wangdi的游戏社区 5538

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 473

cocos2d-x 3.0加载PhysicsEditor生成plist的加载器并生成CCPhysicsBody

一、环境: cocos2d-x 3.0 PhysicsEditor 1.0.10 二、cocos2d-x 3.0 篇: 从cocos2d-x 3.0 可以在scene 中直接添加物理世界后,开发物理效果的2d游戏相对轻松多了。可是编辑多边形的body 就成了问题,之前-x 2.x 版的PE loader 没有目前 CCPhysicsBody 的封装。本人就参考 之前的...

modabobo 279

Star CCM+中衍生零部件下的阈值应用与区域内删除目标网格

同样的在绘制网格结束后,有时出现负体积网格或质量差的网格,为了节约时间成本,可能会选择将负体积的网格或质量差的网格删除。弹出相应的窗口,在窗口中选择相应的区域①,选择标量函数②(此处以网格体积变化为例),选择模型③,设置阈值④,选择No Dispalyer,会根据需求选择显示,最后点击Create⑥完成创建。此处以温度为例,若出现温度异常点,首先在①栏中勾选Function,然后在下面点击⑤Select,在弹出的Function窗口中选择温度场函数,再点击④Identify,查找温度异常网格数量。

2201_75375391的博客 2221

项目管理 Agent:进度追踪与风险预警 Harness

我们先从LangChain的Agent定义说起:Agent是一个能感知环境、自主决策、调用工具、执行动作、迭代反思的智能实体。而「项目管理全自主Agent」,就是把Agent的核心能力和项目管理的五大过程组(启动、规划、执行、监控、收尾)深度结合,聚焦执行监控阶段的两个核心痛点:进度偏差自动化计算、风险信号自动化识别与预警的专门化Agent。全感知(Omnisensing):能从。

AI架构师小马 515

如何使用 PhysicsEditor 加快 cocos2dx-Box2D 开发

附件: vs2010工程下载 原文链接:http://blog.csdn.net/zhangxaochen/article/details/8018489 看这里: http://is.gd/VoBVUJ PhysicsEditor 是一款很好的box2d 形状生成工具,通过图形界面,点点鼠标,生成形状的plist文件,然后使用他的api生成fixtures加到需要的body中去。 软

zhangxaochen的专栏 1万+

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

使用PhysicsEditor1.0.11在Cocos2dx3.1下创建PolygonShape

PhysicsEditor使用的是试用版1.0.11,它所带shi li

zhana0的专栏 1167

SCI投稿Title Page、Cover letter、Highlights、Manuscript模板

(简要介绍一下论文的创新性). I hope this paper issuitable for “Journal Name”.版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/weixin_48615832/article/details/120317336。

qq_15963745的博客 3698

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

cocos2dx游戏开发必备工具之PhysicsEditor

  今天收到PhysicsEditor作者发过来的license key,所以顺便把PhysicsEditor也尝试了一下。主要是尝试将PhysicsEditor与cocos2dx,box2d结合开发的一些步骤。之前大概网络检索了一下,知道PhysicsEditor的功能其实很简单。一句话就是给图片的边缘定位,并且指定图片对齐(重心?)位置,然后导出成plist文件。用来快速给box2d提供图片...

Linux Job 367

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

cocos2dx游戏开发必备工具之PhysicsEditor【ZT】

问作者要了个授权,free的,忘记remove这个下载的link了,贴个授权申请的地址http://www.codeandweb.com/request-free-license 以下文章为转帖,地址忘记了~很感谢原作者~   今天收到PhysicsEditor作者发过来的license key,所以顺便把PhysicsEditor也尝试了一下。主要是尝试将PhysicsEditor与coc...

weixin_34194702的博客 106

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Cocos2d-x_Box2D刚体使用PhysicsEditor工具生成形状

众所周知,Box2D中的刚体形状如果比较简单,我们可以使用Box2D中的几个形状子类生成,但是如果我们游戏中的刚体的形状比较复杂,那我们需要使用第三方工具生成,而现在Box2D的第三方工具很少,目前所知道的只有:一个是在Mac系统下使用的  VertexHelper工具,一个是Windows系统下使用的PhysicsEditor工具,我们这里就来讲讲PhysicsEditor工具导出的pl

青青子衿 1455

box2d系列:如何使用 PhysicsEditor 加快 cocos2dx-Box2D 开发

附件: vs2010工程下载 原文链接:http://blog.csdn.net/zhangxaochen/article/details/8018489 看这里: http://is.gd/VoBVUJ   http://bbs.ityran.com/article-91-4.html http://bbs.ityran.com/article-91-4.html

西门小咔的码农世界 510

cocos2d-x 必备的工具 TexturePacker & Physicseditor

TexturepackerThe sprite sheet creator turns chaos into orderhttp://www.codeandweb.com/texturepacker 作用:图片打包和资源优化。把散乱的图片打包成大图片,进行资源优化。 PhysicseditorEdit your physics shapes with easehttp://www.codean...

weixin_33980459的博客 144

最近用到这个强大的工具 PhysicsEditor (转)

今天收到PhysicsEditor作者发过来的license key,所以顺便把PhysicsEditor也尝试了一下。主要是尝试将PhysicsEditor与cocos2dx,box2d结合开发的一些步骤。之前大概网络检索了一下,知道PhysicsEditor的功能其实很简单。一句话就是给图片的边缘定位,并且指定图片对齐(重心?)位置,然后导出成plist文件。用来快速给box2d提供图片边缘...

weixin_30383279的博客 265

cocos2d-x+box2d+PhysicsEditor+win7强大的box2d工具

用到的工具:PhysicsEditor 首先我们要达到的效果图: 在游戏当中加入了物理世界的话会让你的游戏更真实更好玩,所以就让我们去用一款强大的软件轻松做画吧 打开软件   在box2d中多边形最多能由8个顶点,所以要构造一个复杂的花瓶的话,我们就采用多个多边形拼接在一起。下一步我们点publish As得到plist文件,放入cocos2dx的项目

爱去玩的专栏 2656
上一篇: Cocos2dx杂记:Cocos2d 3.x版本 MeshSprite Cocos的网格变换(非原创)
下一篇: C/C++: MD5编码
胖胖的战士
博客等级 码龄18年 104粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值