0

我正在使用 SpriteBuilder 制作游戏。目标是摧毁一些 CCSprite。我在屏幕上有 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];
}

非常感谢,如果之前有人问过这个问题,我很抱歉,但我找不到

4

1 回答 1

0

好吧,我建议这种方法:

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

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];

}

就这样。

于 2014-05-05T00:17:51.617 回答