Cocos2d iphone 从屏幕上清除特定的精灵

Cocos2d iphone 从屏幕上清除特定的精灵,cocos2d-iphone,Cocos2d Iphone,我使用cocos2d,有很多精灵和身体。每个精灵都有它的身体,每种精灵都有一个标签。(见下一页) 当两个精灵彼此接触时,我会发现这一点,我希望他们消失 问题是,我有许多来自同一种类的精灵(具有相同的标签),所以当我清理精灵时,它会清理创建的最后一个精灵,而不是我想要的那个 我用同一种类创建精灵的功能是: -(void)fruit1:(int) randomForCoordinates { //define sprite fruit1=[CCSprite spriteWithFi

我使用cocos2d,有很多精灵和身体。每个精灵都有它的身体,每种精灵都有一个标签。(见下一页)

当两个精灵彼此接触时,我会发现这一点,我希望他们消失

问题是,我有许多来自同一种类的精灵(具有相同的标签),所以当我清理精灵时,它会清理创建的最后一个精灵,而不是我想要的那个

我用同一种类创建精灵的功能是:

-(void)fruit1:(int) randomForCoordinates
{

    //define sprite
    fruit1=[CCSprite spriteWithFile:@"fruit1.png"];
    fruit1.tag=2;
    fruit1.position=ccp(randomForCoordinates,500);
    //add fruit
    b2BodyDef spriteBodyDef;
    spriteBodyDef.type =b2_dynamicBody;
    spriteBodyDef.position.Set(fruit1.position.x/PTM_RATIO,fruit1.position.y/PTM_RATIO);
    spriteBodyDef.userData = fruit1;
    fruit1body = world->CreateBody(&spriteBodyDef);

    b2PolygonShape spriteShape; //b2polygon-for box shape
    spriteShape.SetAsBox(fruit1.contentSize.width/PTM_RATIO/2,fruit1.contentSize.height/PTM_RATIO/2); //for b2polygon
    b2FixtureDef spriteShapeDef;
    spriteShapeDef.shape = &spriteShape;
    spriteShapeDef.density = 10.0;
    spriteShapeDef.isSensor = false;
    fruit1body->CreateFixture(&spriteShapeDef);
    [self addChild:fruit1];

}
它被标记为2。 当我看到与此相关的联系人时:

//cotact listener 
    std::vector<MyContact>::iterator pos;
    for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos) 
    {
        MyContact contact = *pos;
        b2Body *bodyA=contact.fixtureA->GetBody();
        b2Body *bodyB=contact.fixtureB->GetBody();

        //check if collision between to bodies
        if( bodyA->GetUserData() !=NULL && bodyB->GetUserData() !=NULL)    //if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture))
        {
            CCSprite *actor = (CCSprite*)bodyA->GetUserData(); 
            CCSprite *actorb = (CCSprite*)bodyB->GetUserData();


            //touch
            if ([actorb tag] == 2  && [actor tag]== 1)
            {
            [fruit1.parent removeChild:fruit1 cleanup:YES];
            NSLog(@"touch1");

            }
//cotact侦听器
std::vector::iterator pos;
对于(pos=_contactListener->_contacts.begin();pos!=_contactListener->_contacts.end();++pos)
{
MyContact contact=*位置;
b2Body*bodyA=contact.fixtureA->GetBody();
b2Body*bodyB=contact.fixtureB->GetBody();
//检查两个实体之间是否存在碰撞
if(bodyA->GetUserData()!=NULL&&bodyB->GetUserData()!=NULL)//if(contact.fixtureA==\u bottomFixture&&contact.fixtureB==\u ballFixture)| |(contact.fixtureA==\u ballFixture&&contact.fixtureB==\u bottomFixture))
{
CCSprite*actor=(CCSprite*)bodyA->GetUserData();
CCSprite*actorb=(CCSprite*)bodyB->GetUserData();
//触碰
如果([actorb标记]==2&&[actor标记]==1)
{
[Froot1.parent removeChild:Froot1 cleanup:YES];
NSLog(@“touch1”);
}
现在消失的精灵不是在这里接触过的那个,而是在他之后创造出来的

我如何才能擦除一个特定的精灵,即刚刚接触到另一个精灵的精灵?? 不是上次创建的吗


非常感谢

如果两个精灵发生碰撞,请删除任何一个,如下所示:

 if( bodyA->GetUserData() !=NULL && bodyB->GetUserData() !=NULL)    //if ((contact.fixtureA == _bottomFixture && contact.fixtureB == _ballFixture) ||(contact.fixtureA == _ballFixture && contact.fixtureB == _bottomFixture))
    {
        CCSprite *actor = (CCSprite*)bodyA->GetUserData(); 
        CCSprite *actorb = (CCSprite*)bodyB->GetUserData();


        //touch
        if ([actorb tag] == 2  && [actor tag]== 1)
        {

            [self removeChild:actor cleanup:YES];
            //(or)
            [self removeChild:actorb cleanup:YES];


        NSLog(@"touch1");

        }

谢谢,但我得到了这样的警告:实例方法removeChild:withCleanup未找到(返回类型默认为id)…那么我该如何更正它呢?当我执行[self-removeChild:actorb cleanup:YES]时,我的模拟会崩溃,即使我将联系人侦听器放在tick方法之外。我做错了什么?试试这个。如果([actorb tag]==10&&[actor tag]==11{world->DestroyBody(bodyB);[self-removeChild:actorb cleanup:YES];NSLog(@“touch1”);return;}效果很好!但只有在使用“return”时才有效最后,我为什么需要返回?另一件事是我如何知道哪个主体是我需要的主体?我必须检查所有选项吗?主体A何时为tag1或何时为tag2?