#ios
#iOS
Вопрос:
У меня возникли небольшие проблемы с реализацией изменения фона, когда игрок набирает определенный счет.
Я использую строку if(self.score> = 10), чтобы сообщить моей игре изменить фон, но, похоже, это не работает. У меня нет ошибок с этой строкой, но и результатов тоже нет.
Что у меня есть:
@implementation Scene{
SKScrollingNode * floor;
SKScrollingNode * back;
SKLabelNode * scoreLabel;
}
- (void) createBackground
{
back = [SKScrollingNode scrollingNodeWithImageNamed:@"back" inContainerWidth:WIDTH(self)];
if(self.score>=10){
back = [SKScrollingNode scrollingNodeWithImageNamed:@"image2" inContainerWidth:WIDTH(self)];
[back setAnchorPoint:CGPointZero];
[back setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]];
back.physicsBody.categoryBitMask = backBitMask;
back.physicsBody.contactTestBitMask = birdBitMask;
[self addChild:back];
}
Комментарии:
1. как часто вы вызываете createbackground? Вы проверили свой счет (NSLog)? Я бы установил KVO на счет, и когда он изменится, я бы установил новый фон.
2. Хм … хорошо, я попробую это сейчас.
Ответ №1:
есть определенные моменты, которые вы должны иметь в виду, я думаю, что ваш фон содержит физическое тело
1) может быть и время перехода, когда первый фон сталкивается со вторым фоном, и они мешают друг другу меняться местами
измените свою бит-маску collisionbit для обоих фонов -> запретить их столкновение
например
bg.physicsBody.categoryBitMask=bg1;
bg.physicsBody.collisionBitMask=0;
bg.physicsBody.contactTestBitMask=bg2;
bg.physicsBody.categoryBitMask=bg2;
bg.physicsBody.collisionBitMask=0;
bg.physicsBody.contactTestBitMask=bg1;
или используйте skaction для смены фона
Ответ №2:
Я бы сделал это так, чтобы создать совершенно новый SKScene полностью с новым фоном.
Или, если вы хотите, чтобы они переходили к следующему фону. Я бы создал два фона.
Пример. // этот синтаксис неправильный (не помню)
//initializing
SKSpriteNode *bg1 = [SKSpritenode spritenodefromImage:@"bg1"];
SKSpriteNode *bg1 = [SKSpritenode spritenodefromImage:@"bg1"];
bg1.position = CGPointMake(self.size.width/2, self.size.height/2);
bg2.position = CGPointMake(self.size.width/2 bg1.size.width, self.size.height/2);
//////////////////////////////
//then when you want to scroll them
-(void)scrollBackgrounds
{
bg1.position = CGPointMake(bg1.position.x - 5, self.size.height/2);
bg2.position = CGPointMake(bg2.position.x -5 , self.size.height/2);
}