1

タッチでスプライトを移動しようとしています。しかし、2 つのスプライトがある場合、2 つのスプライトに触れています。スプライトが正しく動かないのはそのためです。

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

if (_mouseJoint != NULL) return;

    UITouch *myTouch = [touches anyObject];
    CGPoint location = [myTouch locationInView:[myTouch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];
    b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

    for(int i=0;i<[mutArrFixtures count];i++)
    {
        b2Fixture *fixture;
        [[mutArrFixtures objectAtIndex:i] getValue:&fixture];

        if (fixture->TestPoint(locationWorld)){

            for(int j=0; j<[mutArrPaddleBody count]; j++)
            {
                b2Body *body;
                [[mutArrPaddleBody objectAtIndex:j] getValue:&body];
                b2MouseJointDef md;
                if(body == fixture->GetBody())
                {
                    md.bodyA = _groundBody;
                    md.bodyB = body;
                    md.target = locationWorld;
                    md.collideConnected = true;
                    md.maxForce = 1000.0f * body->GetMass();

                    _mouseJoint = (b2MouseJoint *)_world->CreateJoint(&md);
                    body->SetAwake(true);
                }
            }
        }
    }
}

私はb2Fixtureの配列とb2bodymutArrFixturesの配列を持っていmutArrPaddleBodyます。しかし、これで2番目のスプライトに触れると、最初のスプライトと2番目のスプライトに触れます.2つのスプライトの位置は同じです...

4

1 に答える 1

1

タッチ機能で、スプライトのタグを確認してください。それが正しいスプライトである場合は、移動します。タッチ移動に使用したコードをいくつか見せてください。

.....。

これらのコードを次のコードに置き換えます

            b2Body *body;
            [[mutArrPaddleBody objectAtIndex:j] getValue:&body];
            b2MouseJointDef md;
            if(body == fixture->GetBody())

b2Body* body = fixture->GetBody();

CCSprite *sprite = (CCSprite*)body->GetUserData();

if( sprite && sprite.tag == kTagHero) 
{

}

移動するスプライトにタグkTagHeroを追加したことを確認してください。

...。

enum gameTag {
  kTagHero = 1001
};

そしてsprite.tag=kTagHeroを割り当てます.....。

于 2012-08-17T07:19:19.500 に答える