Tell me more ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

I have created a weldJoint between two sprites and I also created a method (spritePositionRelease) that returns the exact position of a sprite when a mouseJoint is released. I want to track the sprite's movement after the mouseJoint is released and continually compare the sprite's position with spritePositionRelease value till the sprite's y value is the same as the spritePositionRelease whiles the x values are different. When this happens I would like the weldJoint to be destroyed. Please help I've been at it for days. See the code below.

spritePositionRelease:

- (CGPoint)spritePositionRelease    {

for(b2Body *b = mouseJoint->GetBodyB(); b; b=b->GetNext())    {
if (b->GetUserData() != NULL)
{
    CCSprite *mySprite = (CCSprite*)b->GetUserData();
    if (mySprite.tag == 1) {
        mySprite.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
        CGPoint spritePosition = mySprite.position;
        CCLOG(@"the sprite position is x:%0.2f , y:%0.2f", spritePosition.x, spritePosition.y);

        return spritePosition;

    }
}
}
}

ccTouchesEnded:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

if (mouseJoint)
{
    [self spritePositionRelease];

    world->DestroyJoint(mouseJoint);
    mouseJoint = NULL;
}
}

update:

-(void) update: (ccTime) dt
{
//It is recommended that a fixed time step is used with Box2D for stability
//of the simulation, however, we are using a variable time step here.
//You need to make an informed choice, the following URL is useful
//http://gafferongames.com/game-physics/fix-your-timestep/

int32 velocityIterations = 8;
int32 positionIterations = 1;

// Instruct the world to perform a single step of simulation. It is
// generally best to keep the time step and iterations fixed.
world->Step(dt, velocityIterations, positionIterations);

// using the iterator pos over the set
std::set<BodyPair *>::iterator pos;

for(pos = bodiesForJoints.begin(); pos != bodiesForJoints.end(); ++pos)
{
    b2WeldJoint         *weldJoint;
    b2WeldJointDef      weldJointDef;

    BodyPair            *bodyPair = *pos;
    b2Body              *bodyA = bodyPair->bodyA;
    b2Body              *bodyB = bodyPair->bodyB;

    weldJointDef.Initialize(bodyA,
                        bodyB,
                        bodyA->GetWorldCenter());

    weldJointDef.collideConnected = false;
    weldJoint = (b2WeldJoint*) world->CreateJoint(&weldJointDef);

    // Free the structure we allocated earlier.
    free(bodyPair);

   // Remove the entry from the set.
   bodiesForJoints.erase(pos);
}

}  
share|improve this question

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.