【问题标题】:initWithSize gets triggered in Objective-C but not in SwiftinitWithSize 在 Objective-C 中被触发,但在 Swift 中没有
【发布时间】:2014-10-01 15:28:28
【问题描述】:

我有一个用 Swift 编写的非常简单的 SKScene,它不会被触发:

override init(size: CGSize) {
    super.init(size: size)
    backgroundColor = SKColor.whiteColor()
    var bg = SKSpriteNode(imageNamed: "myBackground")
    bg.position = CGPoint(self.size.width/2, self.size.height/2)

    self.addChild(bg)
}

我已经在 Objective-C 中尝试了相同的代码,并且在那里调用它没有问题,所以我想知道他们是否在 Swift 中使用 initWithSize 更改了某些内容,以及我是否遗漏了一些重要的内容。

注意:SKScene 会被触发,只有这个函数不会。

谢谢!

【问题讨论】:

  • 你需要在初始化器的最后执行super.init,可能是这个问题
  • @Eugene 但是如果我这样做了,Xcode 逻辑上会告诉我它不能在 super.init 初始化之前设置一些东西。
  • 您遇到什么错误?我已经尝试了您的代码并得到了您没有为 CGPoint 初始化程序提供 x: 和 y: 参数的错误,所以我添加了它们并且代码可以正常工作。您是否尝试过设置断点或打印以查看代码是否实际上没有被触发?
  • @Eugene "在 super.init 初始化之前在基础对象中使用方法 ..." 但是即使我删除了所有代码并只使用 super.init,该方法也不会被调用。 ..
  • @Eugene super.init 需要放在最后有什么特别的原因吗?

标签: swift sprite-kit skscene


【解决方案1】:
In **GameViewcontroller** viewDidLoad(), Make sure your calling like this
   let skView = self.view as SKView

   let scene = **GameScene.init(size:skView.bounds.size)**
   skView.showsFPS = true
   skView.showsNodeCount = true

   /* Sprite Kit applies additional optimizations to improve rendering performance */
   skView.ignoresSiblingOrder = true

   /* Set the scale mode to scale to fit the window */
   scene.scaleMode = .AspectFill

   skView.presentScene(scene)


**GameScene.swift**

**init(size: CGSize)** is parameterized constructor. So you have to call it manually.

override init(size: CGSize) {
 super.init(size: size)
 backgroundColor = SKColor.whiteColor()
 var bg = SKSpriteNode(imageNamed: "myBackground")
 bg.position = CGPoint(x: self.size.width/2, y: self.size.height/2)

 self.addChild(bg)
}

required init?(coder aDecoder: NSCoder) {
 super.init(coder: aDecoder)
}

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多