拖动附加到主体的精灵

时间:2013-10-22 07:45:07

标签: cocos2d-iphone box2d

我有CCSprite附加到b2world的正文。 当有人触摸它时,我想用触摸位置移动它。 使用一个正常的精灵工作正常,但有一个有一个身体的精灵 - 它没有。 它获得了触摸,但没有移动精灵(身体跟随精灵或相反?) 我该怎么做?施加相对于触摸的力是一个问题..

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

    UITouch *touch = [touches anyObject];
    CGPoint currentPosition = [touch locationInView: [touch view]];


    //detect a touch ont the button
    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
    {

        CGPoint location=[[CCDirector sharedDirector] convertToGL: currentPosition];

        CCSprite *tempSprite = (CCSprite *) b->GetUserData();
        if( tempSprite.tag==2  )
        {

            if(CGRectContainsPoint([tempSprite boundingBox], location))
            {
                tempSprite.position=location;
                NSLog(@"touched");
             }
        }

    }

}

1 个答案:

答案 0 :(得分:1)

尝试使用SetTransform函数更改正文的位置。我认为它看起来像:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView: [touch view]];


//detect a touch ont the button
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{

    CGPoint location=[[CCDirector sharedDirector] convertToGL: currentPosition];

    CCSprite *tempSprite = (CCSprite *) b->GetUserData();
    if( tempSprite.tag==2  )
    {

        if(CGRectContainsPoint([tempSprite boundingBox], location))
        {
            b->SetTransform( b2Vec2( location.x/PTM_RATIO, location.y/PTM_RATIO ), 0 ); //change position of the body
            NSLog(@"touched");
         }
    }

}

}

不要忘记,如果你想改变身体姿势施加力或设定线速度,你必须使用运动或动态体型。