коснуться создать тело коснуться уничтожить тело - PullRequest
0 голосов
/ 21 октября 2011

Я ищу способы создания тела в Box2D с первого прикосновения и уничтожь его вторым прикосновением.

Для создания тела я использую этот метод:

(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL: location];

    if (touch.tapCount > 1) {
        CGSize winSize = [CCDirector sharedDirector].winSize;
        CCSprite *sprite = [CCSprite spriteWithFile:@"sprite.png" rect:CGRectMake(0, 0, 90, 90)];

        sprite.position = ccp(location.x/PTM_RATIO, location.y/PTM_RATIO);
        sprite.tag = 7;
        [self addChild: sprite];

        b2BodyDef ballBodyDef2;
        ballBodyDef2.type = b2_dynamicBody;
        ballBodyDef2.position.Set(location.x/PTM_RATIO, location.y/PTM_RATIO);
        ballBodyDef2.userData = sprite;

        b2Body *body2 = _world->CreateBody(&ballBodyDef2);

        b2CircleShape circle;
        circle.m_radius = 22.0/PTM_RATIO;//(arc4random()*26.0)/PTM_RATIO;

        b2FixtureDef ballShapeDef2;
        ballShapeDef2.shape = &circle;
        ballShapeDef2.density = 1.0f;
        ballShapeDef2.friction = 0.5f;
        ballShapeDef2.restitution = 0.2f;

        body2->CreateFixture(&ballShapeDef2);
    } else {
        b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

        for (b2Body* b = _world->GetBodyList(); b; b = b->GetNext()) {
            b2Fixture *bf1 = b->GetFixtureList();
            if (bf1->TestPoint(locationWorld)) {
                CCSprite *tempSprite = (CCSprite *) b->GetUserData();
                if (tempSprite .tag==7) {
                    [self removeChild:tempSprite cleanup:YES];
                    _world->DestroyBody(b);
                }
            }
        }
    }
}

С помощью этого метода, чтобы создать тело, я должен коснуться экрана 2 раза, а затем еще раз, чтобы уничтожить его. Что мне нужно сделать, чтобы вы один раз нажали, чтобы создать тело, а затем еще раз, чтобы уничтожить?

1 Ответ

0 голосов
/ 22 октября 2011

Таким образом, вы создаете тело, когда нажимаете один раз, затем снова нажимаете, чтобы уничтожить

    if (isBodyCreated ==NO)
    {
        isBodyCreated=YES;
        CGSize winSize = [CCDirector sharedDirector].winSize;
        CCSprite *sprite = [CCSprite spriteWithFile:@"Icon.png"];

        sprite.position = ccp(location.x/PTM_RATIO, location.y/PTM_RATIO);
        sprite.tag = 7;
        [self addChild: sprite];

        b2BodyDef ballBodyDef2;
        ballBodyDef2.type = b2_dynamicBody;
        ballBodyDef2.position.Set(location.x/PTM_RATIO, location.y/PTM_RATIO);
        ballBodyDef2.userData = sprite;

        b2Body *body2 = world->CreateBody(&ballBodyDef2);

        b2CircleShape circle;
        circle.m_radius = 22.0/PTM_RATIO;//(arc4random()*26.0)/PTM_RATIO;

        b2FixtureDef ballShapeDef2;
        ballShapeDef2.shape = &circle;
        ballShapeDef2.density = 1.0f;
        ballShapeDef2.friction = 0.5f;
        ballShapeDef2.restitution = 0.2f;

        body2->CreateFixture(&ballShapeDef2);
    } 
    else 
    {
        b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

        for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) 
        {
            b2Fixture *bf1 = b->GetFixtureList();
            if (bf1->TestPoint(locationWorld))
            {
                CCSprite *tempSprite = (CCSprite *) b->GetUserData();
                if (tempSprite .tag==7) 
                {
                    [self removeChild:tempSprite cleanup:YES];
                    world->DestroyBody(b);
                    isBodyCreated=NO;
                }
            }
        }
    }   

Надеюсь, это поможет вам.

...