如何在Xcode 8.2.1的Single View Application中添加Sprite Kit View?
当然可以!把SpriteKit View加入Single View Application完全没问题,我给你分两种常用方法来说,你可以根据自己的开发习惯选:
方法一:通过Storyboard可视化添加
这种方式适合喜欢拖拽式布局的开发者:
- 打开你的Single View项目,找到
Main.storyboard文件。 - 在右侧的Object Library(找不到的话按
Command + Shift + L调出)里搜索SKView,把它拖到ViewController的主视图上,调整尺寸让它铺满整个屏幕(或者按你的需求设置大小)。 - 右键拖拽这个SKView到你的ViewController类里,创建一个IBOutlet连接,比如命名为
skView。 - 接下来创建一个
SKScene的子类(比如叫GameScene),然后在ViewController的viewDidLoad方法里初始化这个场景并展示:
import SpriteKit class ViewController: UIViewController { @IBOutlet weak var skView: SKView! override func viewDidLoad() { super.viewDidLoad() // 初始化GameScene,尺寸和SKView保持一致 if let scene = GameScene(size: skView.bounds.size) { // 设置场景缩放模式,这里选aspectFill可以铺满屏幕 scene.scaleMode = .aspectFill // 把场景展示到SKView上 skView.presentScene(scene) } } }
- 最后给
GameScene写点测试代码,验证是否加载成功:
import SpriteKit class GameScene: SKScene { override func didMove(to view: SKView) { // 这里可以添加你的游戏元素,先放个测试标签试试 let testLabel = SKLabelNode(text: "SpriteKit 加载成功!") testLabel.position = CGPoint(x: size.width/2, y: size.height/2) testLabel.fontSize = 24 addChild(testLabel) } }
方法二:纯代码添加(无需Storyboard)
如果习惯全代码开发,直接在ViewController里创建SKView并添加为子视图就行:
import SpriteKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 创建SKView实例,尺寸和主视图一致 let skView = SKView(frame: view.bounds) // 设置自动适配屏幕尺寸变化 skView.autoresizingMask = [.flexibleWidth, .flexibleHeight] // 添加到主视图上 view.addSubview(skView) // 初始化并展示GameScene let scene = GameScene(size: skView.bounds.size) scene.scaleMode = .aspectFill skView.presentScene(scene) } }
GameScene的代码和上面方法一里的一样就行。
几个小提醒:
- 记得在用到SpriteKit的文件里导入
SpriteKit框架(Xcode通常会自动帮你导入,但如果报错的话手动加import SpriteKit就好)。 - 游戏的触摸事件、元素逻辑都可以直接在
SKScene子类里处理,不用在ViewController里写,SpriteKit的事件体系会自动传递。 - 运行项目后,就能看到SpriteKit场景正常加载啦,之后就可以在
GameScene里开发你的游戏功能了。
内容的提问来源于stack exchange,提问作者user9620161
相关产品推荐
相关产品推荐

