如何在cocos2dx实现碰撞检测,物理世界Scene::createWithPhysics()

本文介绍了如何在cocos2dx游戏引擎中使用物理引擎进行碰撞检测,包括创建物理场景、设置精灵刚体、调整物理属性、设置碰撞掩码,并详细解析了碰撞掩码的三个组成部分:CategoryBitmask、ContactTestBitmask和CollisionBitmask,以及回调函数的使用和内部实现。
摘要由CSDN通过智能技术生成

精灵和碰撞

在没有接触到游戏引擎自带的物理引擎之前,应该怎么检测两个屏幕上的精灵或者说图片是否接触和碰撞,通常会通过坐标,检测两个精灵的坐标是否相交,这样的方法放在游戏引擎里就很蠢。游戏引擎里提供了封装的物理引擎API,通过这些API能更好的模拟显示世界中的物理效果。

如何在引擎的物理世界中进行碰撞

一般分为4步
1.创建物理场景
2.给需要碰撞的精灵设置刚体
3.设置物理属性(摩擦力,密度,重力等待…)
4.设置碰撞相关的掩码

创建游戏中的物理世界

// 一般创建一个场景的时候,这样创建的是一个普通场景
Scene* scene = Scene::create();
// 当需要使用物理引擎的API时第一件事就是通过createWithPhysics()
//创建场景时创建一个物理场景
auto gameScene = Scene::createWithPhysics();
// 通过物理场景对象设置重力的大小以及方向
gameScene->getPhysicsWorld()->setGravity(Vec2(0, -98));

为精灵设置刚体

在创建完物理场景之后,这个场景已经具备和现实世界类似的物理属性(摩擦力,密度,加速度等等…),只不过这些物理属性需要自己设置,不然就都默认为没有,要设置精灵的物理属性必须先给对应的精灵添加刚体

	// 假设先创建一个精灵
	this->hero = Sprite::create("sprite.png");
	this->addChild(this->hero);

	// 要让我们的精灵能进行碰撞,需要给对应的精灵添加一个刚体,
	// Body也是身体的意思,createBox()是添加一个方块形刚体,
	// 引擎中封装了很多简单的刚体还比如createCircle()创建一个圆形刚体
	// 下面创建一个方形刚体
	auto heroBody = PhysicsBody::createBox(
	// 参数1:刚体的形状,因为我准备这张图片也是方形,所以之间
	// getContentSize()获得图片大小设置成刚体形状
	this->hero->getContentSize(), 
	// 参数2:刚体的物体特性(密度,弹性系数,摩擦系数)
	PhysicsMaterial(10, 0.1, 0.1)
	
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值