主題の通り、SKSceanの背景の色をグラデーションさせたいです。
CAGradientLayer()を使いグラデーションのレイヤを作成し、viewのレイヤを変えることを試してみたのですが、どうやってもその方法だとSKScean内のオブジェクトが塗り潰されてしまいます。
一応、グラデーションの写真をjpgなどで作成しSpriteNodeを使うことで実現はできそうなのですが、
できれば、コードで作成したグラデーションをそのまま使い、背景をグラデーションに変えたいです。
いい方法を知っている方、よろしくお願いします。
下のコードは現状のSKSceanが塗り潰されてしまうコードです。
swift
1import UIKit 2import GameplayKit 3import SpriteKit 4import AVFoundation 5 6class stage05ViewController: UIViewController,AVAudioPlayerDelegate{ 7 var bgmplayer:AVAudioPlayer! 8 //画面幅 9 let w = UIScreen.main.bounds.size.width 10 //画面高さ 11 let h = UIScreen.main.bounds.size.height 12 //ステージ幅 13 let stagew = 4 14 //ステージ高さ 15 let stageh = 4 16 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 let ws = w * CGFloat(stagew) 20 let hs = h * CGFloat(stageh) 21 let wd = -CGFloat(stagew - 1) * w / 2 22 let hd = -CGFloat(stageh - 1) * h / 2 23 24 //ステージBGMの設定 25 do{ 26 let audioPath = Bundle.main.path(forResource: "SKY", ofType: "mp3") 27 let bgmurl = URL(fileURLWithPath: audioPath!) 28 bgmplayer = try AVAudioPlayer(contentsOf: bgmurl) 29 }catch{ 30 print("error") 31 } 32 bgmplayer.play() 33 34 //Viewの作成 35 let sv = SKView(frame: CGRect(x: wd , y: hd , width: ws, height: hs)) 36 37 //グラデーションの作成 38 let gradL = CAGradientLayer() 39 gradL.frame = CGRect(x:0, y:0, width: ws, height: hs) 40 let color1 = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1).cgColor 41 let color2 = UIColor(red: 120/256.0, green: 150/256.0, blue: 256/256.0, alpha: 1).cgColor 42 gradL.colors = [color1,color2] 43 gradL.startPoint = CGPoint.init(x: 0.5, y: 0) 44 gradL.endPoint = CGPoint.init(x: 0.5 , y: 1 ) 45 46 //Sceneの作成 47 let ss = stage05(size: sv.frame.size) 48 sv.presentScene(ss) 49 50 //Viewのレイヤをグラデーションに変更 51 ss.view?.layer.insertSublayer(gradL, at: 0) 52 53 view.addSubview(sv) 54 55 //バックボタンの作成 56 let backButton = UIButton(frame: CGRect(x: 0,y: 0,width: w / 5,height:w / 10)) 57 backButton.setTitle("back", for: .normal) 58 backButton.backgroundColor = UIColor.black 59 backButton.addTarget(self, action: #selector(stage05ViewController.back(_:)), for: .touchUpInside) 60 view.addSubview(backButton) 61 } 62 63 override func didReceiveMemoryWarning() { 64 super.didReceiveMemoryWarning() 65 // Dispose of any resources that can be recreated. 66 } 67 68 @objc func back(_ sender: UIButton) { 69 self.dismiss(animated: false, completion: nil) 70 } 71}
作ったグラデをUIImage経由でSKTextureにするのではダメ?
回答1件
あなたの回答
tips
プレビュー