2015-12-08 6 views
0

Я извиняюсь заранее, если это глупый вопрос, но я учусь, и я не могу найти никакой помощи. Большая часть моего опыта связана с раскадными версиями, поэтому SpriteKit - это мой первый реальный набег на то, чтобы делать все программно.Как заменить фоновое изображение с помощью SpriteKit?

У меня есть прокручивающая 2D игра, очень похожая на Flappy Bird. Каждый раз, когда игрок набирает счет, кратный, скажем, 10, мне нужен фон для изменения. Фон - это одно изображение, которое медленно перемещается влево от экрана и заменяется собой.

Проблема в том, что когда она достигает 10, я не могу заменить изображение другим изображением. Я успешно добавил новое изображение поверх старого, используя zPosition, но исходное изображение все еще находится под ним, и это кажется неуклюжим и неустойчивым.

Я попытался удалить исходное фоновое изображение от родителя, но я не могу понять, как это сделать.

Вот мой код. Заранее спасибо.

var currentBg = SKTexture(imageNamed: "img/bgYellow.png") 

func makeBackground() { 

    let movebg = SKAction.moveByX(-currentBg.size().width, y: 0, duration: 9) 
    let replacebg = SKAction.moveByX(currentBg.size().width, y: 0, duration: 0) 
    let movebgForever = SKAction.repeatActionForever(SKAction.sequence([movebg, replacebg])) 

    for var i:CGFloat=0; i<3; i++ { 

     bg = SKSpriteNode(texture: currentBg) 
     bg.position = CGPoint(x: currentBg.size().width/2 + currentBg.size().width * i, y: CGRectGetMidY(self.frame)) 
     bg.size.height = self.frame.height 
     bg.runAction(movebgForever) 
     movingObjects.addChild(bg) 

    } 

} 

fun didMoveToView() { 

     //Set up game, etc... 

     makeBackground() 

} 

if score == 10 { 

     //I've tried adding the following line to remove the first image, but no luck 
     //movingObjects.removeChildrenInArray([bg])   

     currentBg = SKTexture(imageNamed: "img/bgRed.png") 
     makeBackground() 

} else if score == 20 { 

     currentBg = SKTexture(imageNamed: "img/bgBlue.png") 
     makeBackground() 

} //Else etc... 

ответ

0

Вы меняете текстуру, а не свою background текстуру узла.

var background: SKSpriteNode! 

Затем вам нужно создать свой фон

background = SKSpriteNode(texture: SKTexture(imageNamed: "img/bgYellow.png"), color: UIColor.clearColor(), size: CGSizeMake(world.frame.size.width, world.frame.size.height)) 
    background.position = CGPointMake(world.frame.size.width/2, world.frame.size.height/2) 
    // etc 

Чтобы изменить фоновое изображение:

if score == 10 { 

    background.texture = SKTexture(imageNamed: "img/bgRed.png") 
    makeBackground() 
} 
Смежные вопросы