Изменение фона игры SpriteKit при определенном счете

#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);

}