Отображение кнопки, когда все "вражеские" ccsprites были удалены со сцены

Я использую 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 ответ

Решение

Ну, я бы предложил этот метод:

Создайте переменную, в которой вы сохраните количество оставшихся спрайтов. Например:

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. В значение селектора напишите: changeLevel и target: 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. Теперь повторите с 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];

}

И это все.

Другие вопросы по тегам