把两个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);
}