0

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");
             }
        }

    }

}
4

1 に答える 1

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");
         }
    }

}

}

体の位置を変更して力を加えたり、線形速度を設定したい場合は、キネマティックまたはダイナミック ボディ タイプを使用する必要があることを忘れないでください。

于 2013-10-22T23:10:40.790 に答える