好吧,我建议这种方法:
创建一个变量来存储剩余的精灵数量。例如:
int spritesLeft;
然后将其初始化为 0:
-(void) didLoadFromCCB{
//REST OF CODE
spritesLeft=3; //3 because you said there are only 3.
}
现在当你调用 danaldRemoved: 方法时,只需将 spritesLeft 减 1,然后检查 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。在选择器值处写入:changeLevel 和目标:文档根目录
现在像处理任何其他对象一样在 .m 文件的顶部声明它:
CCButton *nextButton;
按钮的方法(只需将可见性设置为 ON)
-(void) printButton{
nextButton.visible = YES;
}
现在您更改级别的方法:
-(void) changeLevel{
CCScene *nextLevel = [CCBReader loadAsScene:@"YOUR LEVEL"];
[[CCDirector sharedDirector] replaceScene:nextLevel];
}
希望这可以帮助!
编辑:如何检测精灵何时离开屏幕
正如我所说,在 spritebuilder 中创建任何类型的物理对象。例如,我使用 CCNodeColor。然后把它做成一个矩形,放在屏幕的左边。现在转到物理,启用物理,多边形类型和静态。现在在连接中,选择 doc root var 并将其命名为 _leftNode。现在重复 top、right 和 bottom 并将它们称为 _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];
}
就这样。