void Player::buildPlayerBox2DBody(b2World* world) { CCPoint position = CCPointZero; //body definition b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; bodyDef.fixedRotation = true; b2Vec2 worldPosition = ViewPort::getInstance()->screenToWorldCoordinate(position); bodyDef.position.Set(worldPosition.x, worldPosition.y); //shape definition for main fixture b2PolygonShape dynamicBox = _profile->spriteBox2DShape(); //fixture definition b2FixtureDef fixtureDef; fixtureDef.shape = &dynamicBox; fixtureDef.density = 1; fixtureDef.friction = 0.0f; // So the player will be able to slide next to obstacles fixtureDef.restitution = 0.0f; // So the player will not bounce again from the ground fixtureDef.filter.groupIndex = -1; //negative so the different players will not collide //create dynamic body b2Body *body = world->CreateBody(&bodyDef); //add main fixture body->CreateFixture(&fixtureDef); setB2Body(body); setPTMRatio(ViewPort::getInstance()->getPTMRatio()); setPosition(position); }
void Box2DTestLayer::addNewSpriteAtPosition(Point p) { CCLOG("Add sprite %0.2f x %02.f",p.x,p.y); // Define the dynamic body. //Set up a 1m squared box in the physics world b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO); b2Body *body = world->CreateBody(&bodyDef); // Define another box shape for our dynamic body. b2PolygonShape dynamicBox; dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box // Define the dynamic body fixture. b2FixtureDef fixtureDef; fixtureDef.shape = &dynamicBox; fixtureDef.density = 1.0f; fixtureDef.friction = 0.3f; body->CreateFixture(&fixtureDef); auto parent = this->getChildByTag(kTagParentNode); //We have a 64x64 sprite sheet with 4 different 32x32 images. The following code is //just kdRandomly picking one of the images int idx = (CCRANDOM_0_1() > .5 ? 0:1); int idy = (CCRANDOM_0_1() > .5 ? 0:1); auto sprite = PhysicsSprite::createWithTexture(_spriteTexture,Rect(32 * idx,32 * idy,32,32)); parent->addChild(sprite); sprite->setB2Body(body); sprite->setPTMRatio(PTM_RATIO); sprite->setPosition( Point( p.x, p.y) ); }
void ColliderDetector::setActive(bool active) { if (m_bActive == active) { return; } m_bActive = active; if (m_pB2Body) { if (active) { setB2Body(m_pB2Body); } else { for(auto object : *m_pColliderBodyList) { ColliderBody *colliderBody = (ColliderBody *)object; b2Fixture *fixture = colliderBody->getB2Fixture(); m_pB2Body->DestroyFixture(fixture); colliderBody->setB2Fixture(nullptr); } } } else if (m_pCPBody) { if (m_bActive) { for(auto object : *m_pColliderBodyList) { ColliderBody *colliderBody = (ColliderBody *)object; cpShape *shape = colliderBody->getShape(); if(shape->space == nullptr) { cpSpaceAddShape(m_pCPBody->space, shape); } } } else { for(auto object : *m_pColliderBodyList) { ColliderBody *colliderBody = (ColliderBody *)object; cpShape *shape = colliderBody->getShape(); if (shape->space != nullptr) { cpSpaceRemoveShape(m_pCPBody->space, shape); } } } } }
inline virtual void registerWithWorld(std::shared_ptr<gecom::WorldProxy> world) { B2PhysicsComponent::registerWithWorld(world); b2BodyDef def; def.type = b2_dynamicBody; def.fixedRotation = true; def.position.Set(getParent()->getPosition().x(), getParent()->getPosition().y()); def.linearDamping = 0.6f; setB2Body(world->createBody(def, shared_from_this())); auto bbb = std::make_shared<b2PolygonShape>(); bbb->SetAsBox(m_half_width, m_half_height); auto fix = std::make_shared<b2FixtureDef>(); fix->shape = bbb.get(); fix->density = 130; fix->friction = 0.99f; world->createFixture(getBodyID(), fix, bbb); }
StarPhysicsNode::StarPhysicsNode(const char* f, CCPoint p, AroundMeLayer* layer) : PhysicsNode(layer) { m_image = QString(f); b2BodyDef bd; bd.type = b2_dynamicBody; bd.position.Set(p.x / PTM_RATIO, p.y / PTM_RATIO); bd.userData = this; b2Body *body = m_world->CreateBody(&bd); b2Vec2 vertices[3]; { b2PolygonShape triangle; vertices[0] = b2Vec2(-3.0f, 0.78f); vertices[1] = b2Vec2(-1.98f, -0.84f); vertices[2] = b2Vec2(-1.2f, 1.56f); triangle.Set(vertices, 3); b2FixtureDef fixtureDef; fixtureDef.shape = ▵ fixtureDef.density = 1.0f; fixtureDef.restitution = 0.5; fixtureDef.friction = 0.3f; fixtureDef.filter.categoryBits = CHEERIOS; body->CreateFixture(&fixtureDef); } { b2PolygonShape triangle; vertices[0] = b2Vec2(-1.2f, 1.56f); vertices[1] = b2Vec2(1.2f, 1.56f); vertices[2] = b2Vec2(0.0f, 3.0f); triangle.Set(vertices, 3); b2FixtureDef fixtureDef; fixtureDef.shape = ▵ fixtureDef.density = 1.0f; fixtureDef.restitution = 0.5; fixtureDef.friction = 0.3f; fixtureDef.filter.categoryBits = CHEERIOS; body->CreateFixture(&fixtureDef); } { b2PolygonShape triangle; vertices[0] = b2Vec2(1.2f, 1.56f); vertices[1] = b2Vec2(1.98f, -0.84f); vertices[2] = b2Vec2(3.0f, 0.78f); triangle.Set(vertices, 3); b2FixtureDef fixtureDef; fixtureDef.shape = ▵ fixtureDef.density = 1.0f; fixtureDef.restitution = 0.5; fixtureDef.friction = 0.3f; fixtureDef.filter.categoryBits = CHEERIOS; body->CreateFixture(&fixtureDef); } { b2PolygonShape triangle; vertices[0] = b2Vec2(1.98f, -0.84f); vertices[1] = b2Vec2(0.0f, -2.22f); vertices[2] = b2Vec2(1.8f, -3.0f); triangle.Set(vertices, 3); b2FixtureDef fixtureDef; fixtureDef.shape = ▵ fixtureDef.density = 1.0f; fixtureDef.restitution = 0.5; fixtureDef.friction = 0.3f; fixtureDef.filter.categoryBits = CHEERIOS; body->CreateFixture(&fixtureDef); } { b2PolygonShape triangle; vertices[0] = b2Vec2(0.0f, -2.22f); vertices[1] = b2Vec2(-1.98f, -0.84f); vertices[2] = b2Vec2(-1.8f, -3.0f); triangle.Set(vertices, 3); b2FixtureDef fixtureDef; fixtureDef.shape = ▵ fixtureDef.density = 1.0f; fixtureDef.restitution = 0.5; fixtureDef.friction = 0.3f; fixtureDef.filter.categoryBits = CHEERIOS; body->CreateFixture(&fixtureDef); } { b2Vec2 vertices[5]; b2PolygonShape pentagon; vertices[0] = b2Vec2(-1.98f, -0.84f); vertices[1] = b2Vec2(0.0f, -2.22f); vertices[2] = b2Vec2(1.98f, -0.84f); vertices[3] = b2Vec2(1.2f, 1.56f); vertices[4] = b2Vec2(-1.2f, 1.56f); pentagon.Set(vertices, 5); b2FixtureDef fixtureDef; fixtureDef.shape = &pentagon; fixtureDef.density = 1.0f; fixtureDef.restitution = 0.5; fixtureDef.friction = 0.3f; fixtureDef.filter.categoryBits = CHEERIOS; body->CreateFixture(&fixtureDef); } setContentSize(CCSize(WORLD_TO_SCREEN(3*2), WORLD_TO_SCREEN(3*2))); setScale(WORLD_TO_SCREEN(3) / 100); setPosition(ccp(p.x, p.y)); setB2Body(body); m_sprite = CCSprite::create(f); addChild(m_sprite); }