如何用关卡游戏场景的屏幕截图替换关卡按钮图像?
How can I replace level button image with a screenshot of the level game scene?
我知道如何截取屏幕截图并将其保存到照片库。我使用下面的代码执行此操作。我想用我的 gameScene 的屏幕截图替换我的关卡场景按钮图像。假设我的图像按钮是 150x150。我怎样才能做到这一点?
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)
}
As UIGraphicsGetImageFromCurrentImageContext
returns a UIImage
, and SKTexture
有一个 initiaser 需要 UIImage
, and SKSpriteNode
(我假设你正在使用你的按钮)有一个初始化程序,它需要一个 SKTexture
和一个 CGSize
,我想你有你需要的一切:
if let screenshot = UIGraphicsGetImageFromCurrentImageContext() {
let screenShotTexture = SKTexture(image: screenshot)
let button = SKSpriteNode(texture: screenShotTexture, size: CGSize(width: 150, height: 150))
}
使用它,您将不需要将屏幕截图保存到相册(除非您出于其他原因想要保存)。
我知道如何截取屏幕截图并将其保存到照片库。我使用下面的代码执行此操作。我想用我的 gameScene 的屏幕截图替换我的关卡场景按钮图像。假设我的图像按钮是 150x150。我怎样才能做到这一点?
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)
}
As UIGraphicsGetImageFromCurrentImageContext
returns a UIImage
, and SKTexture
有一个 initiaser 需要 UIImage
, and SKSpriteNode
(我假设你正在使用你的按钮)有一个初始化程序,它需要一个 SKTexture
和一个 CGSize
,我想你有你需要的一切:
if let screenshot = UIGraphicsGetImageFromCurrentImageContext() {
let screenShotTexture = SKTexture(image: screenshot)
let button = SKSpriteNode(texture: screenShotTexture, size: CGSize(width: 150, height: 150))
}
使用它,您将不需要将屏幕截图保存到相册(除非您出于其他原因想要保存)。