Objective c 每5秒删除一个对象Cocos2d
我的cocos2d游戏有问题。我试图每5秒删除一个敌人射出的射弹(每个射弹的寿命应该是5秒),但我不知道怎么做。我得到的错误是Objective c 每5秒删除一个对象Cocos2d,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,我的cocos2d游戏有问题。我试图每5秒删除一个敌人射出的射弹(每个射弹的寿命应该是5秒),但我不知道怎么做。我得到的错误是 Assertion failure in -[CCTimer initWithTarget:selector:interval:] 这是我的密码: -(void)projectileShooting:(ccTime)dt { [self schedule:@selector(projectileShooting:) interval:2.5]; pro
Assertion failure in -[CCTimer initWithTarget:selector:interval:]
这是我的密码:
-(void)projectileShooting:(ccTime)dt
{
[self schedule:@selector(projectileShooting:) interval:2.5];
projcount++;
if([proj count] <= 15 ){
if(enemy1.position.y < 320){
v = ccp(player.position.x,player.position.y);
for(CCSprite *enemies in enemy){
CCSprite * projectilebullet = [CCSprite spriteWithFile:@"Projectile.png"];
[proj addObject:projectilebullet];
[self addChild:projectilebullet];
CGPoint MyVector = ccpSub(enemies.position,player.position );
MyVector = ccpNormalize(MyVector);
MyVector = ccpMult(MyVector, enemies.contentSize.width/2);
MyVector = ccpMult(MyVector,-1);
projectilebullet.position = ccpAdd(enemies.position, MyVector);
for(CCSprite *projectile in proj){
[self schedule:@selector (deleteprojectile:projectile:) interval:5];
}
}
}
}
for(CCSprite *enem2 in enemytwo)
{
if( [proj count] <= 15){
CCSprite * projectilebull = [CCSprite spriteWithFile:@"Projectile.png"];
CGPoint MyVector = ccpSub(enem2.position,player.position );
MyVector = ccpNormalize(MyVector);
MyVector = ccpMult(MyVector, enem2.contentSize.width/2+10);
MyVector = ccpMult(MyVector,-1);
projectilebull.position = ccpAdd(enem2.position, MyVector);
[self addChild:projectilebull];
[proj addObject:projectilebull];
for(CCSprite *projectile in proj){
}
}
}
}
-(void)deleteprojectile:(CCSprite *)protime:(ccTime)dt{
NSMutableArray *timepro = [[NSMutableArray alloc]init];
[timepro addObject:protime];
for(CCSprite *objecttime in timepro){
[proj removeObject:objecttime];
[self removeChild:objecttime cleanup:YES];
}
}
-(无效)射弹射击:(ccTime)dt
{
[自调度:@selector(ProjectleShooting:)间隔:2.5];
projcount++;
如果([proj count]将选择器中的参数名称更改为protime,而不是project。选择器必须与对象的类定义中定义的签名匹配。
选择器定义不正确,计时器可能正在检查对象是否实现了给定的选择器
感谢@RamyAlZuhouri的确认,我没有时间测试它。这有点像黑客,但这是我在程序中使用的,直到我找到一个更优雅的解决方案。我在游戏层中有一个方法,我调用该方法从其父节点移除节点,如下所示:
-(void)removeNode:(CCNode*)node {
[node removeFromParentAndCleanup:YES];
}
当我想安排一个节点在延迟后删除时,我这样称呼它:
[self performSelector:@selector(removeNode:) withObject:node afterDelay:delay];
很简单,而且有效。您试图删除调度方法中的子节点,但什么不起作用?您得到的行为是什么?我在-[CCTimer initWithTarget:selector:interval:]中得到断言失败的断言错误可能是您在选择器中使用了错误的参数名称?(即投射物而不是protime)@giorashc是的,它应该是选择器(DeleteSproject:protime:),你应该回答这个问题。@RamyAlZuhouri谢谢你的确认。我不确定,今天无法测试它,因为投射物拍摄方法中没有protime sprite。我正在做(删除射弹:射弹:)在方法DeleteSproject中传入射弹精灵。然后,射弹会在DeleteSproject方法中传递给protime,所以我认为这不是问题。@Alexyuiop,这与是否有名为Sproject的精灵无关。只需查看您试图调用的方法的签名,并查看您传递的选择器即可对调度方法进行修改。