Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 延迟一段时间后如何移除精灵/b2body?_Ios_Objective C_Cocos2d Iphone_Box2d - Fatal编程技术网

Ios 延迟一段时间后如何移除精灵/b2body?

Ios 延迟一段时间后如何移除精灵/b2body?,ios,objective-c,cocos2d-iphone,box2d,Ios,Objective C,Cocos2d Iphone,Box2d,谢谢你的时间 我正在用box2d做一个项目。当我第一次触摸屏幕时,box2d世界中将创建一只鸟,如下所示 - (void)createBird { //init bird bird = [CCSprite spriteWithFile:@"bird.png"]; bird.scale = 23/[bird boundingBox].size.width; bird.position = center; [self addChild:bird z:12]; } 然后,如果触摸结束,将给鸟

谢谢你的时间

我正在用box2d做一个项目。当我第一次触摸屏幕时,box2d世界中将创建一只鸟,如下所示

- (void)createBird
{    
//init bird
bird = [CCSprite spriteWithFile:@"bird.png"];
bird.scale = 23/[bird boundingBox].size.width;
bird.position = center;
[self addChild:bird z:12];
}
然后,如果触摸结束,将给鸟一个力

    //add box2d body
    b2BodyDef birdBodyDef;
    birdBodyDef.type=b2_dynamicBody;
    birdBodyDef.userData = (__bridge void*)bird;
    birdBodyDef.position.Set(bird.position.x/PTM_RATIO,bird.position.y/PTM_RATIO);
    birdBody=world->CreateBody(&birdBodyDef);

    //create circle shape
    b2CircleShape birdShape;
    birdShape.m_radius=([bird boundingBox].size.width-6)/PTM_RATIO/2;

    // Create shape definitio and add to body
    b2FixtureDef birdFixtureDef;
    birdFixtureDef.shape=&birdShape;
    birdFixtureDef.density=1.6f;
    birdFixtureDef.friction=0.3f;
    birdFixtureDef.restitution=0.3f;
    birdFixture = birdBody -> CreateFixture(&birdFixtureDef);

    // Apply force
    b2Vec2 force = b2Vec2(-2.0f*distance,-2.0f*distance);
    birdBody->ApplyForce(force,birdBody->GetWorldCenter());
    birdBody->SetLinearDamping(0.2f);
然后,当我再次触摸屏幕时,将使用“createBird”方法创建另一只鸟

我想在创建第一只鸟5秒钟后删除它。但是在那个时候,“CCSprite*bird”和“b2Body*birdBody”将指向第二只鸟,那么我如何删除第一只鸟呢


谢谢

我不确定我是否完全理解你的问题,但这可能会有所帮助。在创建新鸟之前,请先调用

if ( bird ) {

  id delayTimeAction = [CCDelayTime actionWithDuration:5.0];

  id removeMySprite = [CCCallFuncND actionWithTarget:bird   selector:@selector(removeFromParentAndCleanup:) data:(void*)NO];

  [bird runAction:[CCSequence actions: delayTimeAction, removeMySprite, nil]];

}
编辑:

初始化数组

NSMutableArray *birds = [NSMutableArray new];
然后在createbird函数中调用它

[birds addObject:newBird];

if ( [birds count] > 1 ) {
    oldBird = [birds firstObject];
    //Call remove function on oldBird
    [birds removeObject:oldBird];
}

一种方法是给你的鸟标签,然后把它们保存到一本不可更改的字典里。 继续遍历该字典,然后在为destroy设置bool变量后,销毁body

我用类做了同样的事情。。。。事实上,在任何情况下,你都需要毁掉自己的身体。(否则您将在稍后面临fps问题)

谢谢您的回复!但是对于“actionWithTarget:bird”,现在鸟指的是新鸟,而不是第一只。我想知道怎样才能去掉第一个。我想我应该使用NSMutableArray,但我不太确定如何做到这一点。