我正在使用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];
}
先谢谢了,如果以前曾问过这个问题,我很抱歉,我很抱歉
答案 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];
}
就是这样。