cocos2dx 3.15 自动创建精灵多边形钢体

主要用到这两个函数


取精灵的顶点信息 : AutoPolygon::generatePolygon();


创建多边形钢体 : PhysicsBody::createPolygon();


 因为第一个函数取出来的信息不能直接作为第二个函数的参数,所以自己重新创建了Vec2数组,然后把获取的顶点信息里面的 顶点重新赋值给Vec2数组,而且实际测试中物理刚体会偏移,自己试了下 X, Y各减去一半,就好了.(不知道为什么,求大神解答)
 


下面是代码

void sprite_base::bindPhysicsBody(Node* pNode, std::string pFileName,unsigned int pContactTestBitmask,bool pGravity)
{
	auto tSize=pNode->getContentSize();

	//pNode要绑定刚体的精灵  pFileName是精灵的图片文件路径

	//Polygon
	auto tPolygon = AutoPolygon::generatePolygon(pFileName, Rect(0, 0, tSize.width, tSize.height));
	const auto count = tPolygon.triangles.indexCount;
	const auto indices = tPolygon.triangles.indices;
	const auto verts = tPolygon.triangles.verts;

	//points
	Vec2* tPoints = new Vec2[count];

	for (int i = 0; i < count; i++)
	{
		tPoints[i].x = verts[indices[i]].vertices.x - pNode->getContentSize().width / 2;
		tPoints[i].y = verts[indices[i]].vertices.y - pNode->getContentSize().height / 2;
	}

	//body
	auto tPhysicsBody = PhysicsBody::createPolygon(tPoints, count);
	tPhysicsBody->getFirstShape()->setMaterial(PhysicsMaterial(0.1, 0.0, 0.5));
	tPhysicsBody->setContactTestBitmask(pContactTestBitmask);
	tPhysicsBody->setRotationEnable(false);
	tPhysicsBody->setGravityEnable(pGravity);
	pNode->setPhysicsBody(tPhysicsBody);

	delete []tPoints;
}

 求大神指正...


















  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值