Ios 延迟一段时间后如何移除精灵/b2body?
谢谢你的时间 我正在用box2d做一个项目。当我第一次触摸屏幕时,box2d世界中将创建一只鸟,如下所示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]; } 然后,如果触摸结束,将给鸟
- (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,但我不太确定如何做到这一点。