【发布时间】:2016-11-28 18:12:25
【问题描述】:
语言:Swift 3.0 --- IDE:Xcode 8.0 beta 2 --- 项目:iOS 游戏 (SpriteKit)
我为 iOS 创建了一个游戏,我知道 Apple 非常严格地接受应用程序/游戏的规则。所以我想知道设置游戏的正确方法是什么。
我从 google 学习创建一个新的 SpriteKit 项目并进行以下设置:
在 GameViewController.swift 中清除 viewDidLoad() 并添加所有内容:
override func viewDidLoad() {
super.viewDidLoad()
let skView = self.view as! SKView
let scene = GameScene(size: skView.bounds.size)
scene.scaleMode = .aspectFit
skView.presentScene(scene)
}
在 GameScene.swift 中删除所有内容并保留此代码:
import SpriteKit
class GameScene: SKScene {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(size: CGSize) {
super.init(size: size)
// add all the code of the game here...
}
}
并在 override init 中开发我的游戏
但我认为用 init 开始游戏实际上是错误的。而正确的方法是使用 didMove() 方法。那么代码应该写在里面吗? :
override func didMove(to view: SKView) {
<#code#>
}
有谁知道哪个是正确的方法?为什么?另外,如果我这样做的方式不对,你能解释一下如何使用 didMove 方法吗?
不知道这是不是一个愚蠢的问题,只是困扰我使用 init 是错误的,并想问是否有人对此了解更多。
【问题讨论】:
-
我不推荐这个 ->
let scene = GameScene(size: skView.bounds.size),使用GameScene(fileNamed:)或GameScene()和scaleMode = .ResizeFill。GameScene(size:)应该与其他 3 个 scaleModes、.Fill、.AspectFill和.AspectFit一起使用,仅当您希望场景在所有设备上具有静态大小时。使用您使用的方式是否会伤害,只有当您动态更改视图大小时,但是如果您可以自己编程以在创建错误之前停止错误,那么这就是进步。 -
没有正确或错误的方式,但您介绍的方式是我创建游戏的方式,因为我使用 .AspectFill 并将大小设置为 iPad 的分辨率。此外,init 是初始化类变量/初始化类具有的值(防止值为零)。当视图呈现给用户时调用 didMoveToView。
标签: ios objective-c swift sprite-kit swift3