Отображение кнопки, когда все "вражеские" 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];
}
И это все.