KDvoid TestBox2D::addNewSpriteWithCoords ( const CCPoint& tPosition ) { // Define the dynamic body. //Set up a 1m squared box in the physics world b2BodyDef tBodyDef; tBodyDef.type = b2_dynamicBody; tBodyDef.position.Set ( tPosition.x / PTM_RATIO, tPosition.y / PTM_RATIO ); //tBodyDef.userData = sprite; b2Body* pBody = m_pWorld->CreateBody ( &tBodyDef ); // Define another box shape for our dynamic body. b2PolygonShape tDynamicBox; tDynamicBox.SetAsBox ( 0.5f, 0.5f ); // Define the dynamic body fixture. b2FixtureDef tFixtureDef; tFixtureDef.shape = &tDynamicBox; tFixtureDef.density = 1.0f; tFixtureDef.friction = 0.3f; pBody->CreateFixture ( &tFixtureDef ); CCNode* pParent = this->getChildByTag ( kTagParentNode ); // We have a 64x64 sprite sheet with 4 different 32x32 images. The following code is // just randomly picking one of the images KDint nOffsetX = ( CCRANDOM_0_1 ( ) > 0.5f ? 0 : 1 ); KDint nOffsetY = ( CCRANDOM_0_1 ( ) > 0.5f ? 0 : 1 ); CCPhysicsSprite* pSprite = CCPhysicsSprite::createWithTexture ( m_pSpriteTexture, ccr ( 32 * nOffsetX, 32 * nOffsetY, 32, 32 ) ); pParent->addChild ( pSprite ); pSprite->setB2Body ( pBody ); pSprite->setPTMRatio ( PTM_RATIO ); pSprite->setPosition ( tPosition ); }
void HelloWorld::addPhysicSprite() { #if CC_ENABLE_CHIPMUNK_INTEGRATION // Use batch node. Faster CCSpriteBatchNode *parent = CCSpriteBatchNode::create(s_SpinPea, 100); m_pSpriteTexture = parent->getTexture(); addChild(parent, 100, kTagParentNode); CCPoint pos = ccp(200,200); int posx, posy; CCNode *parent = getChildByTag(kTagParentNode); posx = CCRANDOM_0_1() * 200.0f; posy = CCRANDOM_0_1() * 200.0f; posx = (posx % 4) * 85; posy = (posy % 3) * 121; int num = 4; cpVect verts[] = { cpv(-24,-54), cpv(-24, 54), cpv( 24, 54), cpv( 24,-54), }; cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero)); body->p = cpv(pos.x, pos.y); cpSpaceAddBody(m_pSpace, body); cpShape* shape = cpPolyShapeNew(body, num, verts, cpvzero); shape->e = 0.5f; shape->u = 0.5f; cpSpaceAddShape(m_pSpace, shape); CCPhysicsSprite *sprite = CCPhysicsSprite::createWithTexture(m_pSpriteTexture, CCRectMake(posx, posy, 85, 121)); parent->addChild(sprite,50); sprite->setCPBody(body); sprite->setPosition(pos); #endif }
void ChipmunkTestLayer::addNewSpriteAtPosition(CCPoint pos) { #if CC_ENABLE_CHIPMUNK_INTEGRATION int posx, posy; CCNode *parent = getChildByTag(kTagParentNode); posx = CCRANDOM_0_1() * 200.0f; posy = CCRANDOM_0_1() * 200.0f; posx = (posx % 4) * 85; posy = (posy % 3) * 121; int num = 4; cpVect verts[] = { cpv(-24,-54), cpv(-24, 54), cpv( 24, 54), cpv( 24,-54), }; cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero)); body->p = cpv(pos.x, pos.y); cpSpaceAddBody(m_pSpace, body); cpShape* shape = cpPolyShapeNew(body, num, verts, cpvzero); shape->e = 0.5f; shape->u = 0.5f; cpSpaceAddShape(m_pSpace, shape); CCPhysicsSprite *sprite = CCPhysicsSprite::createWithTexture(m_pSpriteTexture, CCRectMake(posx, posy, 85, 121)); parent->addChild(sprite); sprite->setCPBody(body); sprite->setPosition(pos); #endif }