Joint关节

把两个body连接在一起的东西。

如果一个是静态的,一个是动态的,就悬在上面晃悠:


#include "T09Joint.h"

void T09Joint::onEnter()
{
	Layer::onEnter();

	PhysicsBody* bodyA;
	PhysicsBody* bodyB;
	{
		PhysicsBody* body = PhysicsBody::createCircle(20);
		bodyA = body;
		Sprite* sprite = Sprite::create();
		_A = sprite;
		sprite->setContentSize(Size(40, 40));
		sprite->setPhysicsBody(body);
		sprite->setPosition(winSize.width / 2 - 50, winSize.height / 2+100);
		addChild(sprite);
	}

	{
		//PhysicsBody* body = PhysicsBody::createEdgeBox(Size(40, 40));
		PhysicsBody* body = PhysicsBody::createBox(Size(40, 40));
		bodyB = body;
		Sprite* sprite = Sprite::create();
		sprite->setContentSize(Size(40, 40));
		_B = sprite;
		sprite->setPhysicsBody(body);
		sprite->setPosition(winSize.width / 2 + 50, winSize.height / 2+100);
		addChild(sprite);
	}

	{
		PhysicsBody* body = PhysicsBody::createEdgeBox(winSize, PhysicsMaterial(1.0f, 1.0f, 0.0f));
		Sprite* sprite = Sprite::create();
		addChild(sprite);
		sprite->setPhysicsBody(body);
		sprite->setPosition(winSize.width / 2, winSize.height / 2);
	}
	  // PhysicsJointDistance特点:两个body之间的距离是固定的。 第三个参数是描点,即连接点。
//	PhysicsJoint* joint = PhysicsJointDistance::construct(bodyA, bodyB, Vec2(0, 0), Vec2(0, 0));


		// PhysicsJointSpring特点:弹性  第五个参数500.弹簧的硬度。
//	PhysicsJoint* joint = PhysicsJointSpring::construct(bodyA, bodyB, Vec2(0, 0), Vec2(0, 0), 500.0f, 500.0f);

		// PhysicsJointPin 特点:别针 一个点上连接两个body,扯它一下跟着跑
//	PhysicsJoint* joint = PhysicsJointPin::construct(bodyA, bodyB, Vec2(winSize.width / 2, winSize.height / 2)); 

		// PhysicsJointMotor 特点:就像齿轮一样,一个转另一个跟着转。
	PhysicsJoint* joint = PhysicsJointMotor::construct(bodyA, bodyB, 1.0);

	{
		auto ev = EventListenerTouchOneByOne::create();
		ev->onTouchBegan = [&](Touch* touch, Event*){
			Point pt = touch->getLocation();
			if (_A->getBoundingBox().containsPoint(pt))
			{
				_C = _A;
				return true;
			}
			if (_B->getBoundingBox().containsPoint(pt))
			{
				_C = _B;
				return true;
			}
			return false; 
		};

		ev->onTouchEnded = [&](Touch* pTouch, Event*){
			Vec2 pt = pTouch->getLocation() - pTouch->getStartLocation();
			_C->getPhysicsBody()->setVelocity(Vec2(pt));
		};
		_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);
	}

	getPhysicsWorld()->addJoint(joint);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值