当所有'敌人'ccsprites已从场景中移除时显示一个按钮

时间:2014-05-04 19:22:48

标签: ios7 cocos2d-iphone ccsprite spritebuilder

我正在使用SpriteBuilder制作游戏。目标是摧毁一些CCSprites。我在屏幕上有3个精灵,并被另一个精灵摧毁,所以当没有更多的“敌人”精灵剩下下一个按钮必须显示时,代码必须有关。我在互联网上看过,并且对Cocos2D编码缺乏经验。这是我用来摆脱'敌人'的代码

-(void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair danald:(CCNode *)nodeA wildcard:(CCNode *)nodeB {

    float energy = [pair totalKineticEnergy];

    if (energy > 5000.f) {
        [self danaldRemoved:nodeA];
    }

}

如果以一定的速度击中物体,它将调用下面的方法

- (void)danaldRemoved:(CCNode *)Danald {

    CCParticleSystem *explosion = (CCParticleSystem *)[CCBReader load:@"Explosion"];

    explosion.autoRemoveOnFinish = TRUE;

    explosion.position = Danald.position;

    [Danald.parent addChild:explosion];

    [Danald removeFromParent];
}

先谢谢了,如果以前曾问过这个问题,我很抱歉,我很抱歉

1 个答案:

答案 0 :(得分:0)

我会建议这种方法:

创建一个变量,用于存储剩余的精灵数量。例如:

int spritesLeft;

然后将其初始化为0:

-(void) didLoadFromCCB{
 //REST OF CODE
 spritesLeft=3; //3 because you said there are only 3.
}

现在当你调用danaldRemoved:方法时,只需将1减去spritesLeft,然后检查spritesLeft是否等于0.如果是真的,只需调用你的方法来显示一个按钮:

- (void)danaldRemoved:(CCNode *)Danald {

spritesLeft--; //substract 1

CCParticleSystem *explosion = (CCParticleSystem *)[CCBReader load:@"Explosion"];

explosion.autoRemoveOnFinish = TRUE;

explosion.position = Danald.position;

[Danald.parent addChild:explosion];

[Danald removeFromParent];

//check if game is over.
  if (spritesLeft == 0){
     [self printButton];
  }
}

现在创建方法printButton,但在转到SpriteBuilder之前,创建按钮并将其放在您想要的位置。现在取消选中“Visible”值,然后转到代码连接,并选择“Doc root var”(在自定义类下)并为该按钮写一个名称,例如:nextButton。在选择器值write:changeLevel和target:document root

现在将其声明为.m文件的顶部,就像对其他任何对象一样:

CCButton *nextButton;

按钮的方法(仅设置可见性)

-(void) printButton{
   nextButton.visible = YES;
}

现在你改变等级的方法:

-(void) changeLevel{
  CCScene *nextLevel = [CCBReader loadAsScene:@"YOUR LEVEL"];
    [[CCDirector sharedDirector] replaceScene:nextLevel];
}

希望这有帮助!

编辑:如何在探测屏幕时检测到屏幕

正如我所说,在spritebuilder中创建任何类型的物理对象。例如,我使用CCNodeColor。然后将其设为矩形并将其放在屏幕的左侧。现在转到物理,启用物理,多边形类型和静态。现在处于连接状态,选择doc root var并将其命名为_leftNode。现在重复顶部,右侧和底部,并将它们称为_topNode等。

现在转到代码,声明新节点:CCNode *_leftNode;等等...... 现在让我们做一个碰撞类型:

_bottomNode.physicsBody.collisionType = @"_bound";
_leftNode.physicsBody.collisionType = @"_bound";
_rightNode.physicsBody.collisionType = @"_bound";
_topNode.physicsBody.collisionType = @"_bound";

对你的精灵做同样的事情,但我认为你之前已经这样做了。让我们举个例子:

spritename.physicsBody.collisionType = @"_sprite";

现在实现方法:

-(void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair _sprite:(CCNode *)nodeA _bound:(CCNode *)nodeB {

    [_physicsNode removeChild:nodeA cleanup:YES];

}

就是这样。