2017-04-06 1 views
7

Je sais comment prendre et enregistrer une capture d'écran dans la photothèque. Je fais cela en utilisant le code ci-dessous. Je voudrais remplacer mes images de bouton de scène de niveau avec des captures d'écran de ma gameScene. Dis mes boutons d'image sont 150x150. Comment puis-je atteindre cet objectif?Comment puis-je remplacer l'image du bouton de niveau par une capture d'écran de la scène de jeu de niveau?

func takeScreenShot(scene:SKScene) { 
    let bounds = self.scene!.view?.bounds 
    UIGraphicsBeginImageContextWithOptions(/*CGRect(x: 0, y: 0, width: 100, height: 100).size*/bounds!.size, true, UIScreen.main.scale) 
    self.scene?.view?.drawHierarchy(in: bounds!, afterScreenUpdates: true) 
    let screenshot = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    UIImageWriteToSavedPhotosAlbum(screenshot!, nil, nil, nil) 

} 


class LevelSelectScene: SKScene { 

let button1: SKSpriteNode = SKSpriteNode(imageNamed: "image1") 
let button2: SKSpriteNode = SKSpriteNode(imageNamed: "image2") 
let button3: SKSpriteNode = SKSpriteNode(imageNamed: "image3") 

        ... 

override init(size: CGSize){ 
super.init(size: size) 

button1.position = CGPoint(x: self.frame.width/4, y: self.frame.height/2) 
self.addChild(button1) 

button2.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
self.addChild(button2) 

button3.position = CGPoint(x: 3*self.frame.width/4, y: self.frame.height/2) 
self.addChild(button3) 

} 

Répondre

3

Comme UIGraphicsGetImageFromCurrentImageContext retourne une UIImage et SKTexture a une initiaser qui prend un UIImage et SKSpriteNode (que je suppose que vous utilisez pour votre bouton) a un initialiseur qui prend un SKTexture et un CGSize, je pense que vous ont tout ce dont vous avez besoin:

if let screenshot = UIGraphicsGetImageFromCurrentImageContext() { 
    let screenShotTexture = SKTexture(image: screenshot) 
    let button = SKSpriteNode(texture: screenShotTexture, size: CGSize(width: 150, height: 150)) 
} 

Avec cela, vous auriez pas besoin d'enregistrer la capture d'écran à l'album photo (à moins que vous vouliez pour d'autres raisons).

+0

Bien sûr, si vous souhaitez créer une collection de boutons, enregistrez simplement les différentes textures dans un tableau. –

+0

'screenshot' est un optionnel – 0x141E