【问题标题】:Creating a sub-class from a node in the GameScene class从 GameScene 类中的节点创建子类
【发布时间】:2017-01-28 17:45:59
【问题描述】:

我正在尝试从该节点创建一个类,以便可以从中创建各种对象,但 Xcode 一直说“预期声明”。如何从我的节点创建一个类?这是给我一个错误的代码: 附言我对 StackOverflow 比较陌生,所以如果我的问题需要更多详细信息,请告诉我而不是搁置它。谢谢!

import SpriteKit
import GameplayKit

class GameScene: SKScene, SKPhysicsContactDelegate  {

    override func didMove(to view: SKView) {

        class nodeClass{
            let platform = SKSpriteNode(color: UIColor.yellow, size: CGSize(width: 400, height: 60))

            platform.xScale = 0.8
            platform.yScale = 0.8
            platform.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: platform.size.width, height: platform.size.width / 6))

            platform.position = CGPoint(x: 150, y: -100)
            platform.physicsBody?.categoryBitMask = 1
            platform.physicsBody?.collisionBitMask = 0
            platform.physicsBody?.isDynamic = false
            platform.physicsBody?.affectedByGravity = false

            self.addChild(platform)
}
}
}

【问题讨论】:

    标签: swift class sprite-kit subclassing


    【解决方案1】:

    您应该(理想情况下)在函数之外声明和定义您的类。

    由于没有更好的术语,在包含代码的文件的“根”级别。

    为了个人清楚,大多数人,大多数时候,创建一个新文件并使用它来保存他们所有类的声明和定义。这在 Swift 中并不是绝对必要的,但对于刚开始使用时,它是一种有用的清晰技巧。和我一样。

    下一个问题:nodeClass 不是,你写它的方式,继承任何东西。这是一种“独立”类型。由于它在冒号后没有任何东西说明它的子类,它是一个全新的类型。

    在上面,您可以看到GameSceneSKScene 的子类,因为它正在这样做。在被子类化之后的任何类型名称都是Protocols GameScene 同意conform to

    【讨论】:

      【解决方案2】:

      Ad @Confused 刚刚说过,你应该避免在方法中声明一个类。

      这是一个可能的解决方案

      class GameScene: SKScene, SKPhysicsContactDelegate  {
      
          override func didMove(to view: SKView) {
              let platform = Platform(size: CGSize(width: 400, height: 60))
              platform.xScale = 0.8
              platform.yScale = 0.8
              platform.position = CGPoint(x: 150, y: -100)
              self.addChild(platform)
          }
      }
      
      class Platform: SKSpriteNode {
      
          init(size: CGSize) {
              super.init(texture: nil, color: .yellow, size: size)
              let physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: size.width, height: size.width / 6)) // Are you sure about this??
              physicsBody.categoryBitMask = 1
              physicsBody.collisionBitMask = 0
              physicsBody.isDynamic = false
              physicsBody.affectedByGravity = false
              self.physicsBody = physicsBody
          }
      
          required init?(coder aDecoder: NSCoder) {
              fatalError("init(coder:) has not been implemented")
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-05-13
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2023-03-17
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多