Cocos2dx杂记:box2d初探

unity2d游戏开发系列教程:三、场景布置,增加怪物和机关 目录 unity2d游戏开发系列教程:一、环境安装 unity2d游戏开发系列教程:二、新建工程并熟悉Unity编辑器常用功能 第一节、场景草地布置 先查看一下资源文件里都有什么,一会就要用到的 打开Window>2D>Tile Palette 先给地图加个底,防止角色一直下掉 然后随意的添加一些地图块,然后运行看下效果 运行效果 第二节、移动平台布置 第1步、Assets>2DGamekit>Prefabs>Interactables中 阅读详情

1、 所需头文件

#include "Box2D/Box2D.h" 

2、创建一个物理世界

每个box2d游戏都有一个物理世界,下面创建一个与场景一样大小的物理场景。在该物理场景中box2d绑定的物体将满足基本物理属性

bool HelloWorld::initPhysics() {
    Size s = Director::getInstance()->getVisibleSize();

    //重力参数  
    b2Vec2 gravity;
    //重力,1个g
    gravity.Set(0.0f, -9.8f);
    //创建世界  
    world = new b2World(gravity);
    //开启调试
    openDebugDraw();

    //允许物体是否休眠  
    world->SetAllowSleeping(true);
    //开启连续物理测试  
    world->SetContinuousPhysics(true);
    //地面物体定义  
    b2BodyDef groundBodyDef;
    //左下角  
    groundBodyDef.position.Set(0, 0);
    //创建地面物体  
    b2Body* groundBody = world->CreateBody(&groundBodyDef);
    //定义一个有边的形状  
    b2EdgeShape groundBox;
    //底部  
    groundBox.Set(b2Vec2(0, 0), b2Vec2(s.width / PTM_RATIO, 0));
    //使用夹具固定形状到物体上  
    groundBody->CreateFixture(&groundBox, 0);

    //顶部  
    groundBox.Set(b2Vec2(0, s.height / PTM_RATIO), b2Vec2(s.width / PTM_RATIO, s.height / PTM_RATIO));
    groundBody->CreateFixture(&groundBox, 0);

    //左边  
    groundBox.Set(b2Vec2(0, s.height / PTM_RATIO), b2Vec2(0, 0));
    groundBody->CreateFixture(&groundBox, 0);

    //右边  
    groundBox.Set(b2Vec2(s.width / PTM_RATIO, s.height / PTM_RATIO), b2Vec2(s.width / PTM_RATIO, 0));
    groundBody->CreateFixture(&groundBox, 0);

    return true;
}

3、创建物体

首先在场景中创建一个图片精灵,然后将图片绑定到物理body上,这样物体将具备物理属性

#define PTM_RATIO 32  

auto sp = Sprite::create();
sp->setPosition(100, 100);
sp->setScale(0.3f);
this->addChild(sp, -1);

sp->initWithFile("aaa/wood.png");
sp->setRotation(rotate);
phyObjList.push_back(sp);

//物体定义  
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(x / PTM_RATIO, y / PTM_RATIO);
b2Body *body = world->CreateBody(&bodyDef);
body->SetUserData(sp);
body->SetTransform(body->GetPosition(), CC_DEGREES_TO_RADIANS(sp->getRotation()));

b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(sp->getContentSize().width * 0.3f / 2 / PTM_RATIO, sp->getContentSize().height * 0.3f / 2 / PTM_RATIO);

// 夹具定义  
b2FixtureDef fixtureDef;
//设置夹具的形状  
fixtureDef.shape = &dynamicBox;
//设置密度  
fixtureDef.density = 1.0f;
//设置摩擦系数  
fixtureDef.friction = 0.5f;
//使用夹具固定形状到物体上    
body->CreateFixture(&fixtureDef);

4、注意事项

图片需要在update中同步图片的位置,box2d只负责计算,图片需要自己根据结果设置位置

void HelloWorld::update(float dt) {
    float timeStep = 0.03f;
    int32 velocityIterations = 8;
    int32 positionIterations = 3;

    //同步刷新显示的位置
    world->Step(timeStep, velocityIterations, positionIterations);
    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
    {
        if (b->GetUserData() != nullptr) {
            Sprite* sprite = (Sprite*)b->GetUserData();
            sprite->setPosition(Vec2(b->GetPosition().x *
                PTM_RATIO, b->GetPosition().y * PTM_RATIO));
            sprite->setRotation(-1 * CC_RADIANS_TO_DEGREES(b->GetAngle()));
        }
    }
}
cocos2dx 3.x使用Box2d 众所周知cocs2dx 3.x中有个Physics的封装,本意可能是想同时封装chipmunk和box2d,但为什么只实现了chipmunk就不管box2d了呢。。 最近尝试了一下,chipmunk问题很多,只要PhysicsBody速度够快,即便是和staticBody或Edge碰撞都可能发生穿透,而且即使没有发生穿透,如果持续给一个body设置速度,它就会无视碰撞,堂而皇之的穿透出去。。 阅读详情

相关推荐

基于Cocos2dx + box2d 实现的愤怒的小鸟Demo

1. Demo初始界面 2. 游戏界面 3. 精确碰撞检测 4. 下载  压缩文件目录 AngryBird source 愤怒的小鸟Demo源代码,基于Cocos2dx C++,已经box2d技术。 run 可执行程序目录 点击打开链接

卖萌的大叔的专栏 2736

cocos2dx-setUserData

if (model)                 menu_item->setUserData((void *)model->getItemID());             else                 menu_item->setUserData((void *)0); _selected_item_id =  (uintptr_t)(((MenuItemSp

navno1的专栏 3382

【COCOS2DX-BOX2D游戏开发之三】 读取tiledmap的tmx阻挡

做一款像素游戏项目,需要读取TMX文件中的阻挡区域,生成box2d的fixture,来做阻挡

Teng's world 1万+

游戏开发入门(八)游戏中的场景管理

视频链接:游戏开发入门(八)游戏中的场景管理(5节课 时常:约2小时07分钟) 授课者通过2D围棋的例子,逐步拓展成3D的虚拟游戏世界。这个3D游戏世界基本上就可以涵盖市面上所有类型的游戏了,我们通过各种手段去管理好这个游戏世界,就能快速的进行各种游戏逻辑的开发。 笔记与总结(请先学习视频内容): 1.什么是场景物体?什么是游戏场景? 游戏中所有具有空间属性的物体都是场景物体。 所有...

Jerish的博客 1万+

使用spacy规则化提取自然语言文本信息

1. 安装spacy pip install spicy spicy还需要载入文本库,使用pip的下载方式: python3 -m spacy download en_core_web_sm 但是很有可能因为网络问题下载速度非常缓慢,所以可以选择到github上去直接下载(注意和自己的spacy版本匹配):github下载链接 下载*.tar.gz文件即可。 然后切换到下载路径, pip install en_core_web_sm-3.1.0.tar.gz 2. spacy的一些基础用法 使用spa

六六六六神的博客 1818

I2C总线原理及总线信号的实现

I2C总线是一种多主机总线,连接IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,I2C也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;I2C总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;主要用于近距离(抗干扰能力稍弱),低速的芯片之间的通信(传输视频,带宽

YLG_lin的博客 3939

学习笔记(八):游戏中的场景管理

1.什么是场景物体?什么是游戏场景? 游戏中所有具有空间属性的物体都是场景物体。 所有场景物体构成的集合成为游戏场景。 2.一般情况下哪些内容属于场景物体,哪些不属于场景物体? **场景物体:**玩家,NPC,场景建筑,地形,粒子特效,场景中的道具(武器等),还有一些看不到的对象如volume、摄像机等 非场景物体: UI,UI上的道具,玩家(NPC)技能,玩家(NPC)状态,碰撞盒,物体的材质 个人觉得,非场景物体并没有什么严格意义的概念,刨除所有场景物体,其他的都是非场景物体。或者严格来说,他们并不是我

qq_1628941121的博客 1567

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 357

Unity教程2D入门:21 场景控制SceneManager

https://www.bilibili.com/video/BV1gJ411N7CZ Part1:新增掉到底部 触发游戏重置 场景添加空物体DeadLine,添加一个boxcollider2d放在下面位置,并且给一个DeadLine的tag Player脚本,创建一个Restart函数 void Restart() { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } 在Pl

Mr_Drink的博客 1880

【面试系列】数据工程师高频面试题及详细解答

本文针对数据工程师岗位,提供了详尽的面试题库和解答,分为初级、中级和高级三个层次。初级面试题主要涉及基本的数据处理和ETL工具的使用,如SQL查询、数据清洗和基本的数据建模。中级面试题重点考察数据管道设计、数据库优化和大数据平台的应用。高级面试题则深入探讨高级数据处理技术、分布式系统架构和数据湖的实现。通过这些问题和解答,候选人可以全面了解数据工程师岗位所需的技能,帮助其更好地准备面试。常考知识点总结部分则系统归纳了数据工程师岗位的关键技能领域。

在路上的专栏 2375

STM32cubemx配置驱动DHT11模块

本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。

m0_49476241的博客 5912

Cocos2dx中Box2D的简单使用

1. 所需头文件 2. 代码:

i_am_zw129的专栏 8383

GMSL转eDP芯片MAX9686X(ADI)

MAX96860/MAX96862/MAX96864解串器可以把单路或双路GMSL转换成eDP V1.4a,支持820MHzPCLK的无压缩的24bpp(每个像素的位数)视频,或660MHz的30bpp视频。芯片的GMSL支持NRZ编码的6Gbps/187Mbps的GMSL2,PAM4编码的12Gbps/187Mbps的GMSL3。同时支持单线(COAX模式)双向全双工传输控制数据和video数据。支持DSC压缩的芯片,最大支持像素时钟1080MHz@24bpp或者864MHz@30bpp,传输方式包括同轴

qflook的博客 2835

Cocos2dx 3.1.1 之 在VS2012上配置Box2d

dangwo

最爱小麻烦 1530

Java使用POI生成柱状图导出到word文档(柱状图)

本篇文章主要介绍,如何使用Apache POI组件生成柱状图导出到word文档中,具体步骤看下文。 一、实现效果 Java使用POI技术生成柱状图导出到word文档中,最终生成的柱状图如下所示: 二、环境准备 编程语言:Java 第三方依赖:Apache POI Apache POI依赖代码如下所示: <dependencies> <dependency> <groupId>org.apache.poi</groupId.

✅ Java 开发工程师 7366

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1153

cocos2dx之box2d的使用

开始按步骤走: 1、首先包含头文件,我自己写了几个宏 #include "Box2D/Box2D.h" //将cocos2dx中的像素转成米 #define BOX2D_PX_TO_M(px) px/32.0 //根据box2d中的刚体,获取他对应于cocos2dx中的旋转角度 #define BOX2D_GET_RORATION_BY_BODY(body) CC_RADIAN

TTUZ的博客 1189

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【cocos2dx】box2d使用

刚开始xcode莫名其妙的报错误,提示box2d没有开启,主要有两个地方需要设置,在targets->buidseting->preprocessing中设置CC_ENABLE_BOX2D_INTEGRATION=1删除climuk,project->buidseting->preprocessing同样但是对于使用,a的同志们来说还是找不到,那就必须从新生成cocos2dlib.a文件,生成之前

shy 992

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

cocos2dx box2d

1.cocos2d 自带了两套物理引擎:Box2D 和Chipmunk。  两套引擎都是为2D游戏设计的,可以和cocos2d 完美整合。  Box2D 是用 C++写的,而 Chipmunk 用的是 C。  Box2D中的变量和方法名都是用全称命名的,Chipmunk中很多地方用的是只有一个字母的简写。有一些功能只有Box2D提供,Chipmunk是没有的。比如,Box2D有针对快速移动 

u010442009的专栏 658

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

cocos2dx 3.1.1 box2d 添加debugDraw

cocos2dx 3.x之后把物理引擎都集成了,cocos2dx默认的封装是chipmunk。你可以改换成box2d,具体的操作http://guandongsheng.iteye.com/blog/2125016。 我用了3.x新封装的物理引擎一段时间,感觉上手蛮容易的,简单的物理运动和碰撞还是可以应付的,但是重新封装的物理引擎感觉功能还是没有单独的box2d强大。所以原来想偷懒不学box2d

fanzhang1990的专栏 1668

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

PhysicsEditor 是一款很好的box2d 形状生成工具,通过图形界面,点点鼠标,生成形状的plist文件,然后使用他的api生成fixtures加到需要的body中去。 软件的下载地址: http://www.codeandweb.com/physicseditor 1. 下载安装之后,在类似目录: D:\Program Files\PhysicsEditor\Example

Thinker.的专栏 496

COCOS2DX-BOX2D游戏开发 Box2d概念详解

1.cocos2d 自带了两套物理引擎:Box2D 和Chipmunk。  两套引擎都是为2D游戏设计的,可以和cocos2d 完美整合。  Box2D 是用 C++写的,而 Chipmunk 用的是 C。  Box2D中的变量和方法名都是用全称命名的,Chipmunk中很多地方用的是只有一个字母的简写。有一些功能只有Box2D提供,Chipmunk是没有的。比如,Box2D有针对快速移动 

Lucklyric O.o 914

Cocos2dx杂记:推小球,box2d与TiledMap的使用

前面介绍了box2d和tiledmap 下面以一个物理游戏Demo为例来介绍下box2d与TiledMap基本使用方式1、Demo运行截图(Demo素材收集与网络,如有侵权请告知删除)2、游戏功能介绍点击蓝色的物体变成小球把红色的球推下去,并且吃掉场景中的星星,右面三角形的是跷跷板,没什么作用,大家当做不存在就好。。。3、目录结构 Constants.h 中定义了像素和米数的比 GL

小白的专栏 1293

cocos2d-x 移植到android中编译的一些问题:fatal error: Box2D/Box2D.h: No such file or directory"

原文链接:http://www.verydemo.com/demo_c131_i25100.html

アーキテクトがしたい! 3072

【COCOS2DX-BOX2D游戏开发之一】Box2d概念

1.cocos2d 自带了两套物理引擎:Box2D 和Chipmunk。  两套引擎都是为2D游戏设计的,可以和cocos2d 完美整合。  Box2D 是用 C++写的,而 Chipmunk 用的是 C。  Box2D中的变量和方法名都是用全称命名的,Chipmunk中很多地方用的是只有一个字母的简写。有一些功能只有Box2D提供,Chipmunk是没有的。比如,Box2D有针对快速移动 

Teng's world 1万+

cocos2dx之Box2D

Box2D是与Cocos2d-x一起发布的一套开源物理引擎,也是Cocos2d-x游戏需要使用物理引擎时的首选。二者同样提供C++开发接口,所使用的坐标系也一致,因此Box2D与Cocos2d-x几乎可以做到无缝对接。 Box2D是一套基于刚体模拟的物理引擎,它的核心概念为世界、物体、形状、约束和关节. void MyBox2DLayer::initLayer() { CCSi

专注,努力,勤奋 4107
上一篇: Cocos2dx杂记:推小球,box2d与TiledMap的使用
下一篇: C#:Altas/Libgdx格式图片拆分工具
胖胖的战士
博客等级 码龄18年 104粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值