SpriteKit 视图未在 ViewController 的 viewDidLoad 中呈现场景
SpriteKit View not presenting Scene in ViewController's viewDidLoad
目标:
蓝色背景中应出现一个红色矩形(class Brick),其中包含节点数和 fps。
现实:
灰色背景和节点数以及 fps(例如,没有红色矩形或蓝色背景)
我有以下代码:
GameViewController
import SpriteKit
class GameViewController: UIViewController {
override func loadView() {
self.view = SKView(frame: UIScreen.mainScreen().bounds)
}
override func viewDidLoad() {
super.viewDidLoad()
let scene: GameScene = GameScene()
let viewAsSKView = self.view as! SKView
viewAsSKView.showsFPS = true
viewAsSKView.showsNodeCount = true
viewAsSKView.backgroundColor = UIColor.blueColor()
viewAsSKView.presentScene(scene)
}
}
我最好的猜测是 GameViewController 出了点问题,但我不确定是什么。必须调用 viewDidLoad() 因为我得到了 fps 和节点数。
游戏场景
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let myBrick = Brick()
myBrick.position = CGPointMake(100, 100)
self.addChild(myBrick)
}
}
由于缺乏复杂性,我认为 GameScene 没有任何问题。
AppDelegate
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.orangeColor()
self.window!.rootViewController = GameViewController()
self.window!.makeKeyAndVisible()
return true
}
我知道我的 AppDelegate 没有问题,因为如果我将 self.window!.rootViewController 更改为 UIViewController,我会得到橙色屏幕。
您的场景没有大小。您可以通过使用大小初始化程序初始化场景以编程方式设置大小。
let scene: GameScene = GameScene(size:view.bounds.size)
或将场景的缩放模式设置为ResizeFill
,这样场景的大小将始终调整大小以匹配 SKView 的大小:
scene.scaleMode = SKSceneScaleMode.ResizeFill
此外,您可能希望查看答案 here 以了解有关 Sprite Kit 缩放的更多信息。
目标: 蓝色背景中应出现一个红色矩形(class Brick),其中包含节点数和 fps。
现实: 灰色背景和节点数以及 fps(例如,没有红色矩形或蓝色背景)
我有以下代码:
GameViewController
import SpriteKit
class GameViewController: UIViewController {
override func loadView() {
self.view = SKView(frame: UIScreen.mainScreen().bounds)
}
override func viewDidLoad() {
super.viewDidLoad()
let scene: GameScene = GameScene()
let viewAsSKView = self.view as! SKView
viewAsSKView.showsFPS = true
viewAsSKView.showsNodeCount = true
viewAsSKView.backgroundColor = UIColor.blueColor()
viewAsSKView.presentScene(scene)
}
}
我最好的猜测是 GameViewController 出了点问题,但我不确定是什么。必须调用 viewDidLoad() 因为我得到了 fps 和节点数。
游戏场景
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let myBrick = Brick()
myBrick.position = CGPointMake(100, 100)
self.addChild(myBrick)
}
}
由于缺乏复杂性,我认为 GameScene 没有任何问题。
AppDelegate
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.orangeColor()
self.window!.rootViewController = GameViewController()
self.window!.makeKeyAndVisible()
return true
}
我知道我的 AppDelegate 没有问题,因为如果我将 self.window!.rootViewController 更改为 UIViewController,我会得到橙色屏幕。
您的场景没有大小。您可以通过使用大小初始化程序初始化场景以编程方式设置大小。
let scene: GameScene = GameScene(size:view.bounds.size)
或将场景的缩放模式设置为ResizeFill
,这样场景的大小将始终调整大小以匹配 SKView 的大小:
scene.scaleMode = SKSceneScaleMode.ResizeFill
此外,您可能希望查看答案 here 以了解有关 Sprite Kit 缩放的更多信息。