2017-01-28 14 views
1

Я пытаюсь создать класс из этого узла, чтобы я мог создавать из него различные объекты, но Xcode продолжает говорить «Ожидаемая декларация». Как я могу создать класс из моего узла? Вот код, который дает мне ошибку: P.S. Я относительно новичок в StackOverflow, поэтому, если мой вопрос нуждается в более подробной информации, пожалуйста, дайте мне знать, вместо того, чтобы приостановить его. Благодаря!Создание подкласса из узла класса GameScene

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) 
} 
} 
} 

ответ

2

Объявление @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") 
    } 
} 
3

Вы должны (в идеале) объявить и определить свой класс вне функции.

Из-за отсутствия лучшего термина на уровне «root» вашего файла, содержащего код.

Для большей ясности, большинство людей, большую часть времени, создайте новый файл и используйте это, чтобы сохранить свое объявление и определение всех своих классов. Это не обязательно необходимо в Swift, но это полезная техника четкости, когда вы начинаете. Как и я.

Следующая проблема: nodeClass нет, как вы ее написали, подклассифицируя что угодно. Это «автономный» тип. В силу этого, не имея ничего после двоеточия, заявляющего, что это подклассы, это совершенно новый тип.

Справа сверху вы можете видеть GameScene - это подкласс SKScene, потому что он делает это. Любые имена типов после подкласса ПротоколыGameScene согласен соответствует.